javascript的构造函数

本来打算翻译这篇文章,但是感觉原文才是真正原汁原味的,所以这里也偷偷懒。

之前一直纠结于对象的构造函数,通过阅读Joost Diepenmaat的这篇【Constructors considered mildly confusing】,有了比较明晰的了解。一般来说,对象的constructor其实就是对象的[[Prototype]]的构造函数。

例如函数

function A() {}
function B() {}
function C() {}
B.prototype = new A();
C.prototype = new B();
var c = new C();
console.log(c.constructor === A );    //true
 

那么c.constructor是什么呢。c.constructor==C.prototype.constructor==B.prototype.constructor==A.prototype.constructor==A,即是函数A。因为c.constructor等于函数C的原型的构造函数,C函数的原型是什么呢——B的对象,B的对象的构造函数是函数B的原型的构造函数,B的原型同样是——函数A的对象,A的对象的构造函数就是函数A。这就是为啥c.constructor 等于 A(需要注意的是,这是新建C时的状况,即使后面修改了部分构造函数的原型,这里的原型链依然是新建C那个时刻的原型链)。

对于instanceof,这个函数的作用不用多说,但是他的实际含义确实很模糊(可能自己的理解不全),这篇文章同样也做了同样的说明,其实他就是检测比较对象的原型链中是否存在比较构造函数的原型。详细请参照【Constructors considered mildly confusing】

题外话,最后发现Mozilla Developer Network 的文章相当不错,感觉有时候比一些书籍更为详细。


引用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值