本人小白,跪求大神解答!
function Father () {
this.b =10
}
Object.prototype.b=6
Function.prototype.b=5
Father.prototype.b = 1;
alert(Father.b) //5
结果是5, 我原本的理解是 先搜索自身,然后搜索原型对象(Father.prototype),然后搜索上一层的原型对象。
求大神解答我的理解对于这个问题哪错了?感激不尽!!!
本人小白,跪求大神解答!
function Father () {
this.b =10
}
Object.prototype.b=6
Function.prototype.b=5
Father.prototype.b = 1;
alert(Father.b) //5
结果是5, 我原本的理解是 先搜索自身,然后搜索原型对象(Father.prototype),然后搜索上一层的原型对象。
求大神解答我的理解对于这个问题哪错了?感激不尽!!!
你理解错的地方在于:构造函数创建的原型Father.prototype
,是供继承的对象访问的。构造函数本身(Father)是无法访问自身的prototype原型对象的。
正因如此:
Father自身找不到b这个属性,它就会顺着原型链向上找。既
Father._proto_=Function.prototype
在Function的原型对象上正好定义了b属性为5。所以,结果等于5。
主要就一点,构造函数创建的原型对象,自己是无法访问的。
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
首先:
一个
object A
的原型对象
,是A.__proto__
,而不是A.prototype
它指向的是其
原型B
的prototype
,也即A.__proto__ === B.prototype
其次:
Father
自身也是对象,其原型是Function
new Father()
产生的对象的原型才是Father