function Person() {}
var p1 = new Person()
console.log(p1.__proto__ === Person.prototype) // true
我们发现实例化对象的 __proto__ 和所属的构造函数的 prototype 是一个对象空间
我们可以通过构造函数名称来向 prototype 中添加成员
对象在访问的时候自己没有,可以自动去自己的 __proto__ 中查找
那么,我们之前构造函数的缺点就可以解决了
我们可以把函数放在构造函数的 prototype 中
实例化对象访问的时候,自己没有,就会自动去 __proto__ 中找
那么也可以使用了
function Person() {}
Person.prototype.sayHi = function () {
console.log('hello Person')
}
var p1 = new Person()
p1.sayHi()
p1 自己没有 sayHi 方法,就会去自己的 __proto__ 中查找
p1.__proto__ 就是 Person.prototype
我们又向 Person.prototype 中添加了 sayHi 方法
所以 p1.sayHi 就可以执行了
到这里,当我们实例化多个对象的时候,每个对象里面都没有方法
都是去所属的构造函数的 protottype 中查找
那么每一个对象使用的函数,其实都是同一个函数
那么就解决了我们构造函数的缺点
function Person() {}
Person.prototype.sayHi = function () {
console.log('hello')
}
var p1 = new Person()
var p2 = new Person()
console.log(p1.sayHi === p2.sayHi)