jquery源码_jQuery源码中为什么要写constructor: jQuery

622bcf444fc9fc5e990a194063ad9d0a.png

jquery为什么要把constructor指向自己呢

jQuery2.2.4源码中,第91行jQuery.fn = jQuery.prototype = {}中,有这么一句代码:

constructor: jQuery,

那么,为什么要把constructor指向jQuery自己呢?

我们用几个实例,理解一下这个问题。

通常情况下,在构造函数的原型链上写属性的时候,我们可以用下面两种方式:

obj.prototype.aaa = "bbb";obj.prototype = { aaa = "bbb"}

以上两种写法在大部分情况下是一样的,

但是,有时候还是有区别,比较一下,如下代码运行后结果:

实例1,宝马是一种车

 console.log($().jquery);function car(){}car.prototype.wheel = 5;car.prototype.door = 3;var bmw = new car();console.log(bmw.constructor);

运行结果:ƒ car(){

}

实例2,宝马不是一种车

function car(){}car.prototype = {wheel : 4,door : 4}var bmw = new car();console.log(bmw.constructor);

运行结果:ƒ Object() { [native code] }

我们可以看到,第一种写法,bmw.constructor指向了构造函数car,而第二种写法,bmw.constructor指向了构造函数Object。

因为第一种写法,是在构造函数的原型链上添加了属性,

而第二种写法,是在构造函数的原型链上覆盖了属性。

所以,造成了constructor指向出现了问题

那怎么解决这个问题呢?

让实例2中的宝马,继续属于一种车。

 function car(){ }car.prototype = { constructor : car, wheel : 4, door : 4} var bmw = new car(); console.log(bmw.constructor);

运行结果:

ƒ car(){

}

总结:

加上一句constructor指向自己,就能修正constructor的指向问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值