1、基本用法
可以使方法在不同的上下文中调用时,this
指向的始终是这个对象。
var person = { name: 'Levi', greet: function() { console.log('Hello, ' + this.name); } }; var greetFunction = person.greet; greetFunction(); // 这里通常会输出 "Hello, " 因为 this 不指向 person 对象 var boundGreetFunction = greetFunction.bind(person); boundGreetFunction(); // 这里会输出 "Hello, Levi"
2、预设参数
bind()
方法不仅可以绑定this
,还可以预设参数。
function greet(greeting, punctuation) { console.log(greeting + ', ' + this.name + punctuation); } var person = { name: 'Levi' }; var greetAlice = greet.bind(person, 'Hello'); greetAlice('!'); // 输出: "Hello, Levi!"
3、使用示例
Function.bind(obj[,param1,param2,...])
obj:这个对象将代替Function类里this对象
param1:Function的第一个参数。param2: Function的第二个参数。
返回值是个方法。
示例代码如下:
function man() { this.Name="man"; this.SayName=function(){ alert(this.Name); } } function woman() { this.Name="woman"; this.SayName=function(){ alert(this.Name); } } function say(word,age) { //只有say方法的this是man,或是woman对象才可以调用,say方法本身是没有SayName方法的。 if(this.SayName) this.SayName(); alert(word+age); } var m=new man(); var w=new woman(); //通过bind调用say say.bind(m,"abc",20)();//返回的是方法,还要在执行一下。 //用call调用 say.call(m,"abc",20); //用apply调用 say.apply(m,["abc",20]);
4、bind()与call() 和 apply() 的区别
call()
和 apply()
在调用函数的同时立即设置this的值,而bind()
则返回一个新的函数。call()
和 apply()
的区别在于参数的传递方式:call()
需要将参数依次列出,而apply()
则将所有参数作为数组传递。