关于js原型链的疑问

var person = function(name){
    this.name = name
};

person.prototype.getName = function(){
    return this.name; 
}

var zzz = new person('zzz');
console.log(zzz.getName()); 

console.log(zzz.__proto__ == person.prototype);// true
console.log(person.__proto__ == Function.prototype);// true
console.log(person.prototype.__proto__ == Object.prototype);// 不理解1
console.log(Object.__proto__ == Function.prototype);// true
console.log(Object.__proto__);// function 不理解2
console.log(Object.prototype.__proto__);// null 不理解3
console.log(Function.__proto__);// function 不理解4
console.log(Function.prototype.__proto__);// object 不理解5

一个对象的__proto__指向创建他的函数的prototype。根据这句话,上面的代码我有些理解了,但更多的是不理解。

请大神给讲解一下标注不理解的地方?

clipboard.png

图片是自己的理解,自己总结以下几点:

  1. 所有prototype都是object,所以所有prototype的__proto__都指向Object的prototype。

  2. Object的prototype的__prototype__特殊,指向null.

  3. Function的__proto__也比较特殊,指向自己的prototype.

所以:
console.log(zzz.__proto__ == person.prototype);// true
console.log(person.__proto__ == Function.prototype);// true
console.log(person.prototype.__proto__ == Object.prototype);// true
console.log(Object.__proto__ == Function.prototype);// true
console.log(Function.__proto__ == Function.prototype);//true
console.log(Function.prototype.__proto__ == Object.prototype);//true

阅读 3.1k
5 个回答

clipboard.png
图片是自己的理解,自己总结以下几点:

所有prototype都是object,所以所有prototype的__proto__都指向Object的prototype。
Object的prototype的__prototype__特殊,指向null.
Function的__proto__也比较特殊,指向自己的prototype.
所以:
console.log(zzz.__proto__ == person.prototype);// true
console.log(person.__proto__ == Function.prototype);// true
console.log(person.prototype.__proto__ == Object.prototype);// true
console.log(Object.__proto__ == Function.prototype);// true
console.log(Function.__proto__ == Function.prototype);//true
console.log(Function.prototype.__proto__ == Object.prototype);//true

熟读并背诵<JavaScript高级程序>第六章

你的不理解1:

  • person.prototype是person的原型, 原型也是一个对象, 对象由Object创建,因此 person.prototype.__proto__ == Object.prototype

你的不理解2:

  • 所有的函数都是由Function创建出来的,Object这个构造函数同样也是,因此Object.__proto__ 指向的是Fcuntion.prototype Function的原型式一个函数

你的不理解3:

  • 一切始于null又终于null ! Object.prototype已经是原型链的终点了, 他继承自null

你的不理解4:

  • 和不理解2一样

你的不理解5:

  • Function.prototype.__proto__指向的是 Object.prototype ..原型是个对象! Function特殊一点,他的原型是个函数..函数也是对象

原型链。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题