JS筆記—關於類的靜態屬性的繼承(call方法的運用)
阿新 • • 發佈:2018-11-19
網上看了不少,感覺廢話都太多,抓不住重點,下面單刀直入。
一、先弄清楚對於物件而言call()方法的語法
obj1.obj1's function.call(obj2,parameter1,parameter2,......)
作用:讓obj2代替obj1呼叫原本屬於物件obj1的方法obj1's function,其中parameter1,parameter2......為呼叫obj1's function本身需要的引數。
要點:當obj1可省略,也就是說對於非物件的方法也可以用,只不過對於非物件的方法而言,用call沒有什麼意義,因為我們的初衷是改變物件方法中的this所指的實體。
二、利用call()實現類的靜態屬性繼承
普遍語法上講,JS中並沒有類(新出的Class可能是,但是不是經典語法),這裡的“類”只是借用概念.
下面先給例子
var class1 = function(x){ this.a = x; } var class2 = function(x,y){ class1.call(this,x); this.b = y; } var obj = class2(1,5); console.log("obj.a:"+obj.a+",obj.b"+obj.b); 結果: obj.a:1,obj.b:5
這樣做的好處很明顯,成功利用父類的建構函式,從而等價地實現了子類對於父類靜態屬性的繼承,實現了程式碼重用。
OK,完工!