猿问

原型继承中利用覆盖原型对象方式添加原型成员时遇到的constructor属性指向疑问?

prototype里面已经没有constructor属性,然后往它的原型对象里面找到constructor属性,为何返回的结果不一样?

LEATH
浏览 750回答 1
1回答

不负相思意

感谢题主提了个好问题,让我自己也总结了一下以前学过的知识点,哈哈,欢迎交流讨论以下是我自己的总结①每个函数都有一个prototype,每个对象(函数也是对象)都有一个__proto__(隐式原型)②访问一个对象的属性的时候,如果对象没有该基本属性,则会沿着__proto__链往上查找③对象的__proto__指向创建该对象的原型prototype④函数是由Function函数创建,所以函数的__proto__指向Function的prototype,而Function.prototype也是一个对象,她的__proto__指向Object.prototype⑤自定义函数和自定义对象都由function Object(){}函数创建,Object的prototype也是一个特例,她的__proto__属性指向了null 例如:  var p = new Person();   对象p由Person构造函数创建,所以对象p的__proto__指向Person的prototype__proto__链(原型链)对象p的原型链:p ---->  Person.prototype   ----->  Object.prototype   ----->  null函数Person()的原型链:Person() ----> Function.prototype ----> Object.prototype ----->  null1.console.log(Person.constructor)Person本身是一个函数,它的__proto__指向Function的prototype,它没有constructor属性(只有Person的prototype才有constructor属性),Person的基本属性没有constructor属性,所以它会沿着__proto__(原型链)往上查找,所以它的__proto__上一级是Function的prototype,而Function的prototype的constructor属性指向下面的结果结果: function Function(){}2.console.log(Person.prototype)由于Person.prototype已经被重置为一个空的对象所以会返回一个对象结果: Object但她还是一个对象,所以她还是有__proto__属性,__proto__的上一级是指向Object.prototype,而Object.prototype里面又有如题主图中所示的很多属性3.console.log(Person.prototype.constructor)由于Person.prototype已经被重置为一个空的对象,里面没有constructor属性,所以她会往上查找该属性,上面也提到她的__proto__的上一级是指向Object.prototype,而Object.prototype的constructor属性指向function Object(){}结果: function Object(){}有时间再写详细一点,欢迎指正错误
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答