Predefined:js中的this指向直接運行上下文。數組
call和apply是ECMASCRIPT 3在函數原型上所定義的方法,目的在於改變或指定this的指向,從而改變函數直接執行上下文。二者的不一樣之處在於傳參,call接受多個參數,而apply接受數組。app
1:隱藏的call和apply: 函數
1 var a = "hello"; 2 3 function foo(){ 4 alert(this.a) 5 } 6 7 foo() ; //"hello" 8 foo.call(window); // "hello"
// window.foo() == foo.call(window);
默認的,咱們認爲:若函數以函數名+小括號方式執行,那麼會調用原型中的call方法(此處只討論call方法),動態的指定直接執行上下文.this
2:經常使用技巧:spa
function superType(name){ this.name = name; } function SubType(name){ superType(name) } var instance = new SubType("lihua"); console.log(instance.name); //undefined; console.log(global.name); //lihua //在借用構造函數中 function superType(name){ this.name = name; } function SubType(name){ superType.call(this,name) } var instance = new SubType("lihua"); console.log(instance.name); //lihua; console.log(global.name); //undefined
//使用apply改變傳參方式 var countArr = [1,2,3,13,24,5,21]; Math.max(countArr); //NaN(類型轉換) Math.max.apply(Math,countArr) //24