prototype实现继承的来源
- JavaScript通过new命令来给构造函数创建实例对象后,实例对象无法共享属性和方法,例如
function Person (name) {
this.name = name
this.work = 'write code'
}
var p1 = new Person('suoling')
var p2 = new Person('yaoyuan')
p1.work = 'sleep'
console.log(p2.work)
复制代码
- 综上,每一个实例对象,都有自己的属性和方法的副本。这不仅无法做到数据共享,也是极大的资源浪费
prototype出现
- 由于new命令创建实例对象存在缺点,所以给构造函数设置一个prototype属性,这个属性包含一个对象(以下简称"prototype对象"),所有实例对象需要共享的属性和方法,都放在这个对象里面;那些不需要共享的属性和方法,就放在构造函数里面。
- 实例对象一旦创建,将自动引用prototype对象的属性和方法。也就是说,实例对象的属性和方法,分成两种,一种是本地的,另一种是引用的。如下
function Person (name) {
this.name = name
}
Person.prototype = { work: 'write code' }
var p1 = new Person('suoling')
var p2 = new Person('yaoyuan')
console.log(p1.work)
console.log(p2.work)
Person.prototype.work = 'sleep'
console.log(p1.work)
console.log(p2.work)
复制代码
未完待续