数据类型(七)面向对象
- 构造函数:任何函数都可以当做构造函数,只要使用 new 关键字调用函数创建实例对象(箭头函数除外)
- 继承:
- 原型链继承: 缺点如果某个原型上的引用类型被其中一个实例改变了,那么其他实例也会受到影响。
1
2
3
4
5
6
7
8
9
10
11function Parent(){
this.name = 'this is parent!'
this.getName = function(){
return this.name;
}
}
function Child(){
this.name = 'this is child!'
}
Child.prototype = new Parent()
console.log(new Child().getName()) - 构造函数继承:通过使用 call 或 apply 方法,实现在子类中执行父类型的构造函数
- 优点:原型属性不会被共享
- 缺陷:不会继承父类 prototype 上属性
1
2
3
4
5
6
7
8function Parent(){
this.sayHello = function(){
console.log('Hello!')
}
}
function Child(){
Parent.call(this)
}
- 组合继承:原型链+构造函数继承
- 调用了两次 Parent
- 寄生组合继承
- Child.prototype 上的原始属性会被丢掉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17const Parent = function(){
this.name = 'this is parent'
this.getName = function(){
return this.name
}
}
const Child = function(){
Parent.call(this)
this.age = '18'
this.getAge = function(){
return this.age
}
}
Child.prototype = Object.create(Person.prototype)
Child.prototype.constructor = Child
- Child.prototype 上的原始属性会被丢掉
- 原型链继承: 缺点如果某个原型上的引用类型被其中一个实例改变了,那么其他实例也会受到影响。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 姚永坤的小窝!
评论