创建对象的方法

1.工厂模式

function createPerson(age,name){

var ob=new Object();

ob.name=name;

ob.age=age;

return ob;

}

缺点:无法解决对象识别问题

2.构造函数模式

function Person(name,age){

this.name=name;

this.age=age;

}

与工厂模式的区别:

1)没有显式的创建对象

2)直接将属性和方法给了this

3)没有return

4)调用时需要使用new的方法

5)创建的实例有一个constructor属性等于Person

优点:可以用instanceof 来检测对象累心

说明:

任何函数,只要通过NEW来调用,都是构造函数,任何函数,不通过NEW来调用,都不是构造函数。

缺点:构造函数里创建的函数对于不同实例来说是不同的,这个问题可以通过把函数定义在构造函数之外,然后再让构造函数内部的函数指向它。但这样做会导致多出了很多全局函数,封装性差。

构造函数在不给返回值的时候默认返回一个新的实例对象,也可以自己重写返回值。

3.原型模式

我们创建的每一个函数都有prototype属性,是一个指针,指向一个对象,这个对象可以包含由特定实例共享的属性和方法。就是说,我们不需要在构造函数里定义对象实例的信息,可以直接把信息添加到原型对象里。

我们再来讲讲原型对象:只要创建了一个函数,就会为该函数创建一个prototype属性,指向函数的原型对象,原型对象有一个constructor函数,再指回这个函数,也就是SOMEFUNCTION.prototype.constructor=SOMEFUNCTION

创建了自定义构造函数后,构造函数的原型对象只有一个constructor属性,还有一些从Object继承而来的方法,当调用构造函数创建一个新的实例后,这个实例的内部包含 一个指针,指向构造函数的原型对象,注意 ,是实例指向原型对象,而不是实例指向构造函数。

4.组合使用原型模式和构造函数模式

5.寄生构造函数模式:组合使用工厂模式和构造函数模

funciton Person(){

var values=new Array();

values.push.apply(values,arguments);

return values;

}

这里的返回的values和在函数外创建的数组对象一样,和构造函数、构造函数的原型属性之间不存在联系。不推荐使用。

参考资料《JS高程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值