上一节我们学习函数可以在调用时指定this对象。实际上,我们还可以绑定死this指针。
JavaScript中每一个函数对象还有一个bind方法。bind语法如下:
var newFunc = func.bind(aObject, args1, args2) // 返回一个闭包,当闭包被调用时,aObject将作为this对象
bind方法有几个特点:
- 首先,bind方法返回一个闭包。
- 其次,bind方法接收的第一个参数,当返回的闭包被调用时这个参数将作为this对象。
- 最后,bind方法接收的第二个及以后的参数,在闭包调用时将与调用时参数组成完整参数,传递给原始func。
bind的返回值本质是一个闭包,但是在这里,理解为bind返回了一个新函数也是可以的。
所以,实际上bind()方法有两个作用:
- 作为绑定this对象使用
- 作为偏函数使用
绑定this对象
我们通过以下例子来学习一下:
function showAge()
{
console.log(this.age)
}
showAge();
var newFunc = showAge.bind({age:18}) // 使用bind方法,创建newFunc闭包
newFunc() // 调用闭包
上述代码在bind前调用了一次showAge;在调用了bind返回的闭包后又调用了一次showAge。让我们来看一下运行结果:
运行结果
第一次普通调用showAge()函数,输出的是undefined。第二次,通过bind返回的闭包调用showAge()函数,输出的是18。
可见我们通过bind设置的this起作用了。
偏函数
一个偏函数是一个闭包,其包含了另一个函数的引用,以及另一个函数的前部分参数。当调用偏函数时,偏函数的部分参数与调用时传的参数将组合成完整的参数传递给原始函数。
文字描述有点绕,我们通过一个例子来看:
function showAge(aName, aAge)
{
console.log("Hello " + aName + ", are you " +aAge +" ?")
}
showAge(18) // 直接调用,就完全乱了
var partialFunc = showAge.bind(null, "James") // 建立偏函数
partialFunc(18) // 调用偏函数
上面首先以18为参数调用了showAge函数,然后再以18为参数调用了新建的偏函数。
让我们看一下运行结果:
运行结果
可以看到,showAge(18)输出了杂乱的内容,而partialFunc(18)输出了预期的内容。partialFunc将第一个参数绑定为"James",当调用partialFunc()时将传入的参数18与"James"组合在一起传递给showAge函数。所以产生了预期的结果。
什么是索引容器?
什么是键容器?