目的:不重復寫類的相同屬性和方法
function Box(_a) {
console.log("aaa");
this.a = _a;
this.play();
}
Box.prototype.a = 10;
Object.defineProperty(Box.prototype, "num", {
set: function (value) {
this._num = value;
},
get: function () {
if (!this._num) this._num = 0;
return this._num;
}
})
Box.prototype.play = function () {
console.log("play");
}
Box.run = function () {
}
Box.b = 20;
繼承的分類
冒充式繼承
子類沒有父類下的方法
function Ball(_a){
console.log(this);
Box.call(this, _a);
}
var b = new Ball(10);
console.log(b);
組合式繼承
會丟失帶入的數(shù)據(jù)以及會重復執(zhí)行
function Ball(_a){
Box.call(this,_a);
}
Ball.prototype=new Box();
Ball.prototype.constructor=Ball;
var b=new Ball(10);
console.log(b)
原型式繼承
創(chuàng)建一個空的類厅瞎,這樣就可以不執(zhí)行Box中的constructor了
function Ball(_a){
Box.call(this._a)
}
function F(){}
F.prototype=Box.prototype;
Ball.prototype=new F();
Ball.prototype.constructor=Ball;
let b=new Ball(10);
console.log(b);
寄生式繼承
function Ball(_a){
}
function extend(subClass,supClass){
function F(){}
F.prototype=supClass.prototype;
//Object.assign(subClass.prototype,new f());
subClass.prototype=new F();
subClass.prototype.constructor=subClass;
subClass.prototype.superClass=supClass.prototype;
if(supClaass.prototype.constructor!==supClass){
supClaass.prototype.constructor=supClass
}
}
function Ball(_a){
this.superClass.constructor.call(this._a)
}
extend(Ball,Box);
Ball.prototype.play=function(){
this.superClass.play.call(this);//執(zhí)行超類的play方法
}
var b=new Ball(10);