JS ES5模擬super與多級繼承 三

2021-09-14 04:03:18 字數 1950 閱讀 1483

參考文章

js多層繼承 super方法

參考文章1中提供了乙個思路,_super不一定要是乙個變數, 也可以是乙個函式, 只要它能返回我們期望的父級物件就可以了. 下面是我對它給出的原始碼的一些修改和注釋, 另外有3個測試示例.

/*

* @author: general

* @github:

*//*

* 要想擁有_super()方法, 必須繼承superextend類.

* 注意:

* 1. inherits方法中不要再在assign時為子類新增指向父類本身的屬性了, 會出問題的.

* 2. 當需要使用_super()方法呼叫父類的某個方法時, 必須要保證子類有同名方法, 需要通過子類的方法呼叫父類方法才行

*/function superextend(){}

superextend.prototype._super = function()

}chain = parent;

}return chain;

};/*

* function: 自定義通用繼承方法.

* 使用方法: inherits(子類, 父類)

*/ function inherits(subclass, superclass));

// 建立這種聯絡後, 相當於subclass成了superclass的例項了

// 基本等價於subclass.prototype = superclass

object.setprototypeof ? object.setprototypeof(subclass, superclass) : subclass.__proto__ = superclass;

}

3個測試示例如下

// 測試用例1. 基本測試

function a(a)

inherits(a, superextend);

a.prototype.sayhi = function();

function b(a, b)

inherits(b, a);

b.prototype.sayhi = function();

function c(a, b, c)

inherits(c, b);

c.prototype.sayhi = function();

var c = new c(2, 5, 8);

c.sayhi();

// 測試用例2. 驗證同層級函式間呼叫的情況

function a(a)

inherits(a, superextend);

a.prototype.saya = function();

a.prototype.sayb = function();

function b(a, b)

inherits(b, a);

b.prototype.sayb = function();

function c(a, b, c)

inherits(c, b);

var c = new c(2, 5, 8);

c.saya();

// 測試用例3. 驗證主調函式與被調函式不同名的情況

function a(a)

inherits(a, superextend);

a.prototype.saya = function();

function b(a, b)

inherits(b, a);

b.prototype.sayb = function();

function c(a, b, c)

inherits(c, b);

var c = new c(2, 5, 8);

c.sayb();

JS ES5的嚴格模式

從es3到es5版本的革新意味著要摒棄舊語法,產生新語法 現在的瀏覽器是基於es3的方法 es5的新增方法,而兩者產生衝突的語法部分 即es3能用 es5不能用,或es5能用 es3不能用,或兩者產生的效果不同 遵循es3的語法規則 我們也可以使用es5的嚴格模式,在這種模式下,es3和es5產生衝...

前端面試題 js es5

請補全j ascript函式,要求以字串的形式返回引數的型別。注意 只需檢測基本資料型別。function typeof value 請補全j ascript函式,要求以boolean的形式返回第乙個引數是否屬於第二個引數物件的例項。function instanceof left,right 請補...

js ES5和ES6定義類的區別

以下是es5標準裡定義類的方法 function point x,y point.prototype.tostring function var point new point 1,2 上面這樣用建構函式和原型混合的方法定義類,是為了每次new新例項時可以共享方法,不用建立function新例項。所...