js 原型链

1.每个函数都有一个 prototype 属性指向原型对象。函数创建的实例对象有一个__proto__属性指向该函数的原型对象。函数的原型对象的constructor属性指向该函数。

function Peple(){
    
}
var p1 = new Peple();      //创建Peple的实例对象
var p_proto = Peple.prototype // Peple的原型对象
console.log(p_proto === p1.__proto__)  // true
console.log(p_proto.constructor === Peple) // true

p_proto.myName = "test";  //   在原型对象上添加myName属性
console.log(p1.__proto__.myName)  / / test    实例对象通过__proto__访问原型对象
console.log(p1.myName)    // test   (实例对象没有的属性会继续往上到原型对象上查找)

2.原型对象 p_proto 实际上是Object 的实例

console.log(Object.prototype === p_proto.__proto__)  // true
console.log(Object.prototype.__proto__) // null  (原型链顶端)

3.p1.__proto__.__proto__.__proto__ == null     (p1.__proto__.__proto__ == Object.prototype )

 

 

4.特殊 Function的原型    理解 Function 也是自己的实例对象

console.log(Array.__proto__)        // ƒ () { [native code] }
console.log(Object.__proto__)      // ƒ () { [native code] }
console.log(Function.__proto__)  // ƒ () { [native code] }
console.log(Function.__proto__ === Function.prototype)  // true

console.log(Function.constructor === Function)   // true

 

 

 

 

 

 

 

 

posted on 2019-12-12 19:50  swiftF  阅读(115)  评论(0编辑  收藏  举报

导航