function People(hobby) {
this.name="mike";
this.age=12;
this.hobby=hobby;
this.fun=function (){
}
}
var obj={};
var obj2={};
function Sun (){
People.call(this,"swim");
People.call(obj,"running");//call方法傳遞實(shí)參直接寫
People.apply(obj2,["hiking"]) //apply方法傳遞實(shí)參需要用arguments
}
var a=new Sun ()//實(shí)例化Sun
console.log(a);// {name: "mike", age: 12, hobby: "swim", fun: ?}
console.log(obj);//{name: "mike", age: 12, hobby: "running", fun: ?}
console.log(obj2);//{name: "mike", age: 12, hobby: "hiking", fun: ?}
總結(jié):
當(dāng)在函數(shù)內(nèi)部使用call調(diào)用People函數(shù)時(shí),People函數(shù)原來的this指向People函數(shù)里的狹義對(duì)象喉悴,而在Sun中使用call方法時(shí)奏路,this指向當(dāng)前Sun狹義對(duì)象,相當(dāng)于對(duì)原來的this重新賦值滑臊,this=this(Sun) 如果調(diào)用People不傳實(shí)參,則相當(dāng)于直接調(diào)用People函數(shù),此時(shí)Sun函數(shù)中name痰娱,age屬性和一個(gè)方法,如果傳入實(shí)參,則Sun函數(shù)里有三個(gè)屬性一個(gè)方法弃榨。
apply方法傳遞實(shí)參需要用arguments,用法和call方法相同
call方法和apply第一個(gè)參數(shù)改變?cè)瘮?shù)this指向梨睁,第二個(gè)函數(shù)為調(diào)用函數(shù)時(shí)傳入的實(shí)參(傳參方式不同)鲸睛,this可以指向任何對(duì)象。