盯着目标就是干!!!!!
经典、原型、寄生、组合、寄生组合
经典:在子类构造函数中调用父类构造函数
//es5
function A() {
this.color = ['red']
}
function B(name) {
A.call(this)
this.name = name
}
//面向对象
class A {
constructor() {
}
}
class B extends A {
constructor() {
super()
}
}
原型:ES5通过添加Object.create()方法原型式继承的概率规范化了,在里面创建一个原型,然后在原型上添加属性,最后返回一个原型的实例
function obj(p) {
function F() {}
F.prototype = p
return new F()
}
let p1 = obj()
//es5
let p2 = Object.create()
寄生:在里面创建一个对象,然后在该对象上添加属性,最后返回该对象
function other(original) {
const clone = Object.create(original); //原型继承
clone.say = function () {
console.log("say Hi");
};
return clone;
}
组合:将经典和原型链组合在一起
function Person() {
this.name = "人类";
}
Person.prototype.run = function () {
console.log("人类跑步");
};
function Robot(name) {
//通过经典继承的方式继承父类实例的属性
Person.call(this);
this.name = name;
}
//通过原型链来继承原型上的方法和属性
Robot.prototype = new Person();
寄生组合:
function usefulFunction(Father, Son) {
//这里借用寄生式
function F() {}
F.prototype = Father.prototype;
//这里借用组合式
const p = new F();
p.constructor = Son;
Son.prototype = p;
}