`

javascript 创建对象的五种方式

阅读更多

我们知道javascript中没有像java那样的类和对象,但是它也可以实现一些对象功能。现在分别介绍javascript中五种创建对象的方法并介绍各自利弊。

 

1.工厂模式

 

利用javascript的Object对象方法创建优点是可以用构造方法创造很多对象,缺点是不能判断对象的所属“类”

function createUser(name,age){

var o = new Object();

o.name = name;

o.age = age;

o.sayName = function(){

return this.name;

};

return o;

}

 

var u1 = createUser("tom",23);

alert(u1 instanceof User);//缺点不知道对象类型 User undefined

 

2.构造函数模式化

 

类似于构造方法,可以用new进行创建对象;缺点是对象的方法被创建多次,占用内存大

function User(name,age){

this.name = name;

this.age = age;

this.sayName = function(){

alert(this.name);

}

}

var u1 = new User("alice",22);

var u2 = new User("tom",23);

alert(u1 instanceof User);//true // 可以判断u1 是属于User“类”

//缺点 对象的方法被创建多次

 

alert(u1.sayName == u2.sayName) //false  可以判定u1和u2的sayName 不相等

 

3.原型模式

利用javascript的prototype属性创建对象;克服了构造函数的缺点,却失去了构造函数方法的优点,即不能在new 的时候传递对象属性值;

还有一个致命缺点,那就是:属性引用对象类型时候会发生共享问题

function User(){};

User.prototype.name = "";

User.prototype.age = 0;

User.prototype.address = [];

User.prototype.sayName = function(){

alert(this.name);

}

var u1 = new User();

var u2 = new User();

alert(u1 instanceof User);//true

alert(u1.sayName == u2.sayName) //true

u1.name = "tom";

u1.sayName();

//缺点 1.不能具有构造函数 2.属性引用对象类型时候会发生共享问题(致命缺点)

u1.address.push("河南");

alert(u1.address);//河南

 

alert(u2.address);//河南   u2并没有对address赋值,却读取到了u1的值

 

 

4 混合模式 

混合了构造方法和原型模式,构造方法用来创建对象属性,原型模式用来创建对象方法

function User(name,age){

this.name = name;

this.age = age;

this.address = [];

 

}

User.prototype.sayName = function(){

alert(this.name);

}

var u1 = new User("alice",22);

var u2 = new User("tom",23);

alert(u1 instanceof User);//true

//对象的方法不会被创建多次

alert(u1.sayName == u2.sayName) //true

 

u1.address.push("河南");

u2.address.push("江西");

alert(u1.address);

alert(u2.address); //两个对象的爱address属性不会混淆

 

//比较完美了,最大的问题是方法写在对象外面了,不够优雅

 

动态原型模式

在混合模式上做出修改,更加优雅,把对象方法写在构造方法内部;可以

function User(name,age){

this.name = name;

this.age = age;

this.address = [];

//也可以理解为单例模式,防止后来创建的对象把之前的对象方法覆盖

if(typeof this.sayName != "function"){

User.prototype.sayName = function(){

alert(this.name);

}

}

}

var u1 = new User("alice",22);

var u2 = new User("tom",23);

alert(u1 instanceof User);//true

alert(u1.sayName == u2.sayName) //true

 

//可以认为是最好的状态

 

 

 

 

 

 

分享到:
评论

相关推荐

    javascript创建对象的方式(二)

    这篇博客“javascript创建对象的方式(二)”可能详细介绍了在JavaScript中除了最基础的字面量语法之外的其他创建对象的方法。这里我们将深入探讨几种常见的创建对象的方式。 1. **构造函数**: JavaScript中的...

    JavaScript学习之二 — JavaScript创建对象的8种方式

    本文将深入探讨JavaScript创建对象的8种常见方式,帮助你更好地理解和掌握这门动态类型的编程语言。 1. **字面量(Literal)方式** 这是最简单直接的创建对象的方式,通过大括号{}来定义一个对象,然后在内部用...

    JavaScript创建对象的七种方式(推荐)

    JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产。接下来介绍七种非常经典的创建对象的方式,他们也各有优缺点。 ...

    javascript创建对象的方式(三)

    JavaScript 提供了多种创建对象的方式,每种都有其适用场景。字面量方式适用于简单对象,构造函数和原型对象适用于复杂且需要复用的情况,`Object.create()` 适用于创建新对象并指定原型,而 ES6 类则提供了面向对象...

    javascript创建对象的方式(一)

    这篇博文主要探讨了JavaScript创建对象的几种常见方式,这对于理解和掌握JavaScript面向对象编程至关重要。在实际开发中,了解并灵活运用这些方法能够提高代码的可读性和可维护性。下面,我们将详细讲解标题中提到的...

    JavaScript对象创建的九种方式

    工厂模式是一种封装创建对象过程的方法。通过函数来创建对象,将创建逻辑封装在函数内部,返回新创建的对象。这样可以确保每次调用函数时都得到一个新的对象。 4. **构造函数模式**: 构造函数是一种特殊函数,用于...

    javascript面向对象创建对象的方式小结.docx

    本文将详细介绍JavaScript中创建对象的七种常见方式,并给出具体的示例代码。 #### 二、通过内置`Object`对象的方式创建 这是最简单直接的方式之一,通过`new Object()`创建一个空对象,之后通过点语法为其添加属性...

    javascript如何创建对象

    JavaScript创建对象的方法主要有以下几种: 一、直接创建 直接创建是通过new Object()来创建一个新的空对象,然后逐步给这个对象添加属性和方法。例如,创建一个名为person1的对象,并添加name、gender属性,以及一...

    javascript创建对象的方式(四)

    以上就是JavaScript创建对象的六种常见方式,每种都有其适用场景和优缺点。理解并熟练掌握这些方法,能够帮助你编写出更加灵活、可维护的代码。在实际项目中,根据需求选择合适的方法,可以提升代码质量和效率。

    一、JavaScript 创建对象

    以上就是JavaScript中创建对象的各种方法,每种方法都有其适用场景和优缺点。理解并熟练运用这些技巧,将有助于你编写更高效、更易于维护的代码。在实际开发中,可以根据项目需求和团队习惯选择合适的方法。

    javascript创建对象、对象继承的有用方式详解_.docx

    ### JavaScript 创建对象与对象继承的有效方法 #### 一、引言 JavaScript 是一种基于原型的语言,这使得其处理对象和继承的方式与传统的面向对象编程语言有所不同。本文将深入探讨 JavaScript 中创建对象及对象继承...

    javascript对象创建

    首先,让我们从最基础的创建对象的方式开始。在JavaScript中,可以使用字面量语法来创建一个简单的对象: ```javascript var obj = { name: 'John', age: 30, sayHello: function() { console.log('Hello, ' + ...

    在javascript中创建对象的各种模式解析

    在JavaScript中创建对象主要涉及以下几种模式: 1. 工厂模式 工厂模式是最早期的对象创建方式之一,它通过一个函数来创建对象,并返回新创建的对象。这种方法的核心是利用函数封装创建对象的细节,然后通过返回值来...

    Javascript面向对象编程.

    在JavaScript中,面向对象主要通过以下三种方式实现: 1. **构造函数(Constructor)**:构造函数是一种特殊的函数,用于创建和初始化对象。我们可以通过`new`关键字来调用构造函数,创建一个新的对象实例。例如: ...

    Javascript创建自定义对象 创建Object实例添加属性和方法

    如下所示: 代码如下: var person...上面的例子创建了一个名为person的对象,并为它添加了三个属性(name、age和job)和一个方法(sayName())。其中,sayName()方法用于显示this.name()的值。早期的JavaScript开发人员

    JavaScript核心对象参考手册

    2. **对象创建与原型Prototype**: JavaScript使用`new`关键字创建对象实例,原型链允许对象间共享属性和方法,`__proto__`或`prototype`属性是理解这一机制的关键。 3. **函数对象Function**: 在JavaScript中,函数...

    JAVASCRIPT 面向对象编程精要

    在JavaScript中,创建对象可以通过以下方式: ```javascript let person = { name: "John Doe", age: 30 }; ``` 访问对象的属性也很简单: ```javascript console.log(person.name); // 输出 "John Doe" ``` ####...

    面向对象JavaScript精要(英文原版pdf)

    - **第三章:JavaScript中的类和对象**:详细介绍如何使用JavaScript创建类和对象。 - **第四章:继承**:探讨JavaScript中实现继承的不同方式。 - **第五章:封装和私有性**:讲解如何在JavaScript中实现封装以及...

    【JavaScript源代码】详解js创建对象的几种方式和对象方法.docx

    本文将深入探讨JavaScript中创建对象的几种常见方式以及对象方法。 首先,我们来看“工厂模式”。工厂模式是一种创建对象的抽象方式,通过一个函数来返回一个新的对象。例如: ```javascript function getObj(name...

    javascript创建对象的3种方法

    总结来说,JavaScript创建对象的方法有多种,每种都有其适用的场景。JSON对象适合临时使用,`Object`实例适合简单场景,而构造函数及原型链则更适合构建复杂的、可复用的对象模型。在实际开发中,应根据项目需求选择...

Global site tag (gtag.js) - Google Analytics