Javascript之prototype

Javascriptprototype

文献

[1]  http://www.myowndb.com/blog/?p=26

 

当一个函数被设计来跟new一起使用的时候,称为构造器constructor

因为javascript一方面想跟传统的对象创建方法接近,一方面又想有自己的特点,所以javascript使用构造器的方式比较奇怪。

 

当函数被创建的时候,会被赋给一个prototype成员,prototype是一个对象,该对象包含一个constructor成员,construtor成员指向该函数。并且这个prototype是用来扩展继承于它的对象的重要方法。就目前能看到的情况而言,除了constructorprototype好像没有预定义什么属性,也许还存在其他的预定义属性。

可以将其他成员member加到该函数的prototype中。当函数被new调用创建一个新的对象的时候,这些成员都会被连接link into到这个新对象。

这样可以在没有事先扩展新对象的情况下,通过prototype来添加新的constantsmethods

 

 

假设与问题:

prototype是一个对象,或者准确地说应该是一个对象指针?

为什么prototype能实现继承机制?

    当在当前对象寻找某个属性失败的时候,ECMAScript会在当前对象的prototype指向的对象中继续寻找该属性,以此类推。所以在当前对象调用作为其原型prototype的对象里的属性的时候是可以成功的,所以说当前对象继承了其原型对象的属性,亦即实现了继承机制。

 

关于创建新对象时发生的事情:

    当创建一个新对象的时候,该对象的prototype将指向创建该对象的函数的prototype指向的对象。因此,考虑下面的代码:

    function fConstructor()

{}

fConstructor.prototype.mMethod = function mMethod{};

 

function fNewConstructor()

{}

 

    var oNew = new fConstructor{};

    //change the point of prototype

    fConstructor.prototype = new fNewConstructor{};

    这时,虽然mMethod指向被改变了,但是因为对象oNew的创建在这个改变之前,所以oNew.prototype已经指向了改变之前的,从fConstructor中获取的prototype,并且将继续指向。所以,mMethod的改变对已经创建的对象没有影响,但是会影响下面创建的对象。也是基于oNew.prototype指向了fConstrutor中获取的prototype,如果在创建了对象oNew之后,再改变比如fConstructor.prototype.mMethod指向的函数的话,oNewmMethod也会改变成新的mMethod

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值