js中this,call,apply方法說明

this:this對象是指在運行時期基於運行環境所綁定的也就是說this老是指向調用者數組

代碼說明:app

var k=10;
function test(){
    
    this.k=20;

}
test();//test()<===>window.test()
alert(test.k);//undefined
alert(k)//20
/*說明:this:this對象是指在運行時期基於運行環境所綁定的也就是說this老是指向調用者;
代碼分析: 1.var k=10;至關於window.k=10;
          2.test函數中的this指向的是全局做用域中的window對象,因此此時this.k等價於window.k,
            因爲this.k從新賦值了20,因此此時k就等於20,
            而test.k因爲是個函數的局部變量,
            因此,test.k並無賦值,因此彈出undefined
*/

call,apply方法:函數

  1. 每個函數都包含兩個非繼承而來的方法,call,apply,這兩個方法用途都是在特定的做用域中調用函數,實際上等於設置函數體內的this對象的值;
  2. 簡單用法:綁定一些函數,用於傳參調用;
  3. 擴充函數做用域,使用擴充做用域的好處是對象與函數沒有任何耦合關係

代碼說明:this

//簡單用法:綁定一些函數,用於傳參調用; 
function add(x,y){
    return x+y;
}

function call1(a,b){
    //在test函數中調用add方法而且將test函數的參數傳遞給add方法
    return add.call(this,a,b);

}

call1(1,2);//返回值爲3

function apply1(c,d){
//apply方法和call方法運行效果是同樣的,可是call傳遞普通參數,可是,apply傳遞是一個數組;

    return add.apply(this,[c,d]);

}
apply1(1,2);//返回值爲3

//擴充函數做用域實例

window.color="red";
var obj={color:"green"};
function showColor(){
    
    alert(this.color);

}   

showColor.call(this);//red;this就是window;
showColor.apply(obj);//green,由於綁定的是obj,所以改變了函數做用域
相關文章
相關標籤/搜索