每个函数都有prototype属性。
每一个对象都有一个proto属性,该属性指向其对象的原型。
function Person() {}
var person = new Person();
// person.__proto__ === Person.prototype
原型链:
// 构造函数
function Person(){
}
Person.__proto__ === Function.prototype
Function.prototype.__proto__ === Object.prototype
Object.prototype.__proto__ === null
Perosn.prototype__proto__ === Object.prototype
Obejct.prototype.__proto__ === null
Person的proto指向其原型对象,其原型对象的proto又指向它的原型对象,就这样一直向上找,直到指向最顶层的null
// 例题
Function.prototype.a = "1";
Object.prototype.b = "2";
function Person(){}
let p = new Person();
console.log(p.a) // undefined
console.log(p.b) // 2
这道题很容易迷惑人,我们首先会像到明明设置了a属性,为什么打印出来的a是undefined。为什么会出现这样的结果呢?
因为Function.prototype.a = "1"; 这个语句是为Function设置的属性a。p是Person的实例, p是一个对象不是函数,所以没有a属性
网友评论