显式原型和隐式原型
// 定义实例对象
function Person () { // 创建函数的时候,内部语句:this.prototype = {}
}
1.每个函数function都有一个prototype,即显式原型(属性)
console.log(Person.prototype)
2.每个实例对象都有一个__proto__,即称隐式原型(属性)
// 创建实例对象
let person = new Person() // js引擎在创建实例的时候,做了一个赋值操作,内部语句:this.__proto__ = Person.prototype
console.log(person.__proto__)
3.对象的隐式原型的为其对应构造函数的显式原型的值 // 显式原型和隐式原型指向同一个对象,是对象的两个引用
console.log((person.__proto__ === Person.prototype) // true
// 给原型添加方法
Person.prototype.test = function () {
console.log('test()')
}
// 通过实例对象调用原型方法
person.test()

总结:
1.函数的prototype属性:在函数定义时自动添加的,默认值是一个空的object对象
2.对象的__proto__属性:创建对象时自动添加对的默认值为构造函数的prototype属性值
3.程序员可以直接操作显式原型,但是不能直接操作隐式原型(ES6之前)
浙公网安备 33010602011771号