bind的作用:
將函數(shù)綁定至某個(gè)對(duì)象,在函數(shù)fn()上調(diào)用bind(o),會(huì)在o上綁定一個(gè)新的fn()方法,且該方法中的this指向是o;
var name ='windowName';
var object1 = {
name: '李雷'
,sex: '男'
,getName: function(){
return this.name;
}
}
var object2 = {
name: '韓梅梅'
,sex: '女'
,getSex: function(){
return this.sex;
}
}
參數(shù)說(shuō)明:
首個(gè)參數(shù):定被綁定后的函數(shù)中this的指向。
// 雖然object2并沒(méi)有g(shù)etName方法,但是通過(guò)bind將getName綁定至object2后,object2就擁有了getName方法;
object2.getName = object1.getName.bind();
object2.getName(); //==> windowName 當(dāng)?shù)谝粋€(gè)參數(shù)未設(shè)置時(shí),函數(shù)中的指向?qū)⒅赶騱indow
object2.getName = object1.getName.bind(object1);
object2.getName(); //==> 李雷
object2.getName = object1.getName.bind(object2);
object2.getName(); // ==> "韓梅梅"
其它參數(shù): 指定形參值。
function getAge(name, year){
var age = new Date().getFullYear() - year;
return name +'今年' + age + '歲了';
}
var object = {
name: 'two'
}
object.getAge = getAge.bind(object,'baukh'); // 通過(guò)第二個(gè)參數(shù)指定函數(shù)getAge的數(shù)據(jù)name=baukh
object.getAge(1987); // ==> "baukh今年29歲了"
大吃一驚,已經(jīng)29了?。。。。?!
上面的代碼有毒。