來講下apply和call

EcmaScript3給Function的原型定義了兩個方法: Function.prototype.apply和Function.prototype.call數組

call和apply的區別: 主要是傳參方式的不一樣。 apply傳入的是數組或類數組。瀏覽器

var func = function (a,b,c) {
   alert( [a,b,c] );
}

func.apply( null,[1,2,3] ) ;  // 輸出[1,2,3]    第一個參數表示函數體內的this指向,null表示指向函數默認的宿主對象,在瀏覽器裏是window, 若是用嚴格模式下,則會爲null

func.call( null, 1,2,3 );  //也是輸出 [1,2,3]

var func = function (a,b,c){
   'use strict';
   alert( this === null ); //輸出true
}

var func = function (a,b,c){   
   alert( this === null ); //輸出false  , this 是 window
}

//實例:借用其餘對象的方法
Math.max.apply( null , [1,2,3,4,6,5] );   //6


//改變this的指向
var obj1 = {
   name: 'dongfang'
}
var obj2 = {
   name: 'zeS'
}

window.name = 'abc';

var getName = function(){
   console.log( this.name);
}

getName(); //輸出abc
getName.apply(obj1);  //this指向obj1    輸出dongfang
getName.apply(obj2);  //this.指向obj2   輸出zeS
相關文章
相關標籤/搜索