function People(){
}
People.prototype = {
age: 26,
say: function(){
alert(this.age)
}
}
new People().say() // 26
//如果此時有個child對象各薇,也想使用say方法项贺,但是我不想再b對象下在定義一個同樣功能的say方法,此時call,apply就派上用場了
var child = {age: 38};
new People().say.call(child) //38
從這里可以看出峭判,其實call或者apply都是為了動態(tài)改變this指針而出現(xiàn)的child本身沒有say()方法开缎,卻希望使用say方法,所有使用call林螃,將people類的指針動態(tài)指向child奕删,從而alert自己的age參數
function a(){
console.log(Array.prototype.slice.call(arguments));
}
a(1,2,3,4,5) //[1, 2, 3, 4, 5]
像arguments這種類數組對象,可以調用Array的slice方法來將arguments進行分割處理(arguments是類數組對象治宣,可以理解為[1,2,3,4,5].slice())
apply急侥、call的不同之處
function foo(arg1,arg2){
console.log(arg1,arg2)
}
var c = {}
foo.call(c,1,2,3) //1,2
foo.apply(c,[1,2,3]) //1,2
不同之處就在于call和apply的參數傳入方式不同砌滞。