js里面的call apply bind 方法
利用js里面的function函数
function example(a,b){ console.log(a+b) } example(1,2) 输出 3
call方法
var a = 1; function example(){ console.log(this.a) } 输出 1
this代表的是window对象,a为全局变量,全局变量实际上是window对象的一个属性。
var a = 1; var obj = { a=9; }; function example(b){ return this.a+b } console.log(example.call(obj,2))
输出11,而不是3,实际上,call是改变函数里面的this对象的,如果以example()这种普通方式调用函数的话,this值为我们设置的全局变量。而以call方法调用时,this值为我们传进去的obj对象。
apply方法
apply方法实际上是与call方法用法相同,只不过apply方法传进去的参数是以数组形式例如
example.apply(obj,[2])
其他与call并没有区别。
bind方法
我们用上面的方法使用bind方法
var a = 1; var obj = { a=9; }; function example(b){ return this.a+b } console.log(example.bind(obj,2))
我们会发现打印出来的是一个函数
ƒ example(b){ return this.a+b }}
我们再把参数去掉打印一下
console.log(example.bind(obj))ƒ example(b){ return this.a+b }}
我们会发现并没有变化
实际上bind是将obj对象与函数进行绑定,如果我们需要使用,我们需要将函数重新创建一个变量,然后调用新的变量就可以了,
var newexample = example();newexample()
如果我们再进行打印
console.log(newexample(2))
我们会得到11