美文网首页
js创建对象的七种方法

js创建对象的七种方法

作者: 逆风飘游的鱼 | 来源:发表于2019-08-13 20:54 被阅读0次

1.工厂模式

function createPerson(name, age, job){

var o = new Object();

o.name = name;

o.sayName = function(){alert(this.name);};

return o;

}

var person1 = createPerson("Nicholas", 29, "Software Engineer");

工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。

2.构造函数模式

function Person(name, age, job){

this.name = name;

this.sayName = function(){alert(this.name);};

}

var person1 = new Person("Nicholas", 29, "Software Engineer");

在前面的例子中,person1 和 person2 都有一个名为 sayName()的方法,但那两个方法不是同一个 Function 的实例。

function Person(name, age, job){

this.name = name;

this.sayName = sayName;

}

function sayName(){alert(this.name);}

var person1 = new Person("Nicholas", 29, "Software Engineer");

这样做确实解决了两个函数做同一件事的问题,可是新问题又来了:在全局作用域中定义的函数实际上只能被某个对象调用,这让全局作用域有点名不副实。而更让人无法接受的是:如果对象需要定义很多方法,那么就要定义很多个全局函数,于是我们这个自定义的引用类型就丝毫没有封装性可言了。

3.原型模式

function Person(){}

Person.prototype.name = "Nicholas";

Person.prototype.sayName = function(){alert(this.name);};

var person1 = new Person();

首先,它省略了为构造函数传递初始化参数这一环节,结果所有实例在默认情况下都将取得相同的属性值。虽然这会在某种程度上带来一些不方便,但还不是原型的最大问题。原型模式的最大问题是由其共享的本性所导致的。原型中所有属性是被很多实例共享的,这种共享对于函数非常合适。对于那些包含基本值的属性倒也说得过去,毕竟(如前面的例子所示),通过在实例上添加一个同名属性,可以隐藏原型中的对应属性。然而,对于包含引用类型值的属性来说,问题就比较突出了。来看下面的例子。

person1.friends.push("Van");

4.构造函数和原型模式结合

function Person(name, age, job){

this.name = name;

this.friends = ["Shelby", "Court"];

}

Person.prototype = {

constructor : Person,

sayName : function(){alert(this.name);}

}

var person1 = new Person("Nicholas", 29, "Software Engineer");

创建自定义类型的最常见方式,就是组合使用构造函数模式与原型模式。构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方法的引用,最大限度地节省了内存。另外,这种混成模式还支持向构造函数传递参数;可谓是集两种模式之长。

5.动态原型模式

function Person(name, age, job){

this.name = name;//属性

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

Person.prototype.sayName = function(){alert(this.name);};//方法

}

}

var friend = new Person("Nicholas", 29, "Software Engineer");

6.寄生构造函数

function Person(name, age, job){

var o = new Object();

o.name = name;

o.sayName = function(){alert(this.name);};

return o;

}

var friend = new Person("Nicholas", 29, "Software Engineer");

7.稳妥构造函数模式

function Person(name, age, job){

var o = new Object();//创建要返回的对象

o.sayName = function(){alert(name);//可以在这里定义私有变量和函数//添加方法};

return o;//返回对象

}

相关文章

  • js创建对象的七种方法

    1.工厂模式 function createPerson(name, age, job){ var o = new...

  • 对象,属性,方法,属性绑定

    vue创建在js里面对象的创建方法

  • JS创建对象方法之工厂方法,构造函数方法

    JS创建对象方法之工厂方法,构造函数方法 我们在ECMAScript中创建对象虽然可以通过Object()构造方法...

  • js对象的创建

    一、创建对象的方法 阅读犀牛书(《javascript权威指南》),书中将js创建对象的方法分为四种,对象字面量、...

  • JS创建对象的方法

    初学JS,总结一下JS创建对象的几种方法例如创建一个student对象,属性有age和name,方法是show a...

  • JS数组 && ES6扩展

    JS数组创建 1.以 Array 对象的语法创建 2.以 字面量 方法创建 JS数组方法 1.添加元素 push(...

  • 2017-4-1 VUE

    JS的方法 1、类型判断的方法 2、创建对象构造函数 3、JS基础函数和语法

  • JavaWeb (day3)

    1.js 的 string 对象 创建 string 对象 方法和属性(1)与 html 相关的方法 bold()...

  • JS创建对象的方法

    1.对象的理解 对象是单个实物的抽象,一个网页都可以称为一个对象.接下来我们将接受几种方法如何在编程中创建对象. ...

  • JAVAWeb(第二周)

    js的String对象 创建String对象 var str="abc"; 方法和属性 ***属性: lengt...

网友评论

      本文标题:js创建对象的七种方法

      本文链接:https://www.haomeiwen.com/subject/lturjctx.html