call和apply,函數伴侶

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
相關文章
相關標籤/搜索