组合继承
- 组合继承就是 原型链继承 + 构造函数
原型链继承:
function Animal () {
this.color = [];
}
Animal.prototype.getColor = function () {
return this.color;
}
function Dog () {}
Dog.prototype = new Animal();
缺点: 1. 原型上的引用类型共享 2. 没法传参
构造继承
function Animal (name) {
this.name = name;
this.getColor = function () {
return this.name
}
}
function Dog () {
Animal.call(this, name);
}
缺点: 1. 会创建多个方法
组合继承
function Animal (name) {
this.name = name;
this.color = [];
}
Animal.prototype.getColor = function () {
return this.color;
}
function Dog () {
Animal.call(this, name);
}
Dog.prototype = new Animal();
Dog.prototype.constructor = Dog;
缺点: 调用了两次Animal 构造函数
new Animal() 改成 object.create(Animal.prototype)
new 操作符做了什么
let object = new Object();
object.__prototype__ = F.prototype
let result = F.call(obj);
if (typeof(result) == "object"){
func=result;
}
else{
func=obj;;
}
object.create 做了 什么
function F() {}
F.prototype = o
return new F()