參考文章
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新例項。所...