原生的 Function 物件提供了兩個函式 apply 與 call,可以在呼叫函式時改變函式內 this 指向的物件
Function.apply(obj, [argument1, argument2, ..., argumentN]); Function.call(obj, argument1, argument2, ..., argumentN);
而這兩個函式的差異只在參數的傳遞方式而已,第一個參數皆為 this 的指標,而呼叫函式時的參數,apply 用陣列把參數包起來,call 則是依序列出參數
function alertColor(name) { //若直接呼叫此函式,this 會指向底層的 window 物件 alert(name + '\'s color is ' + this.color + '!'); } function Fruit(color) { this.color = color; } var banana = new Fruit('yellow'); var apple = new Fruit('red'); alertColor.apply(banana, ['Banana']); alertColor.call(apple, 'Apple');
據說這在實作物件階層時特別有用(呼叫父類別的函式?),有機會研究在補上。
Edit: 參考這篇javascript的物件導向程式設計
沒有留言:
張貼留言