在JavaScript中,第一个绑定决定了谁“;这个“;是(绑定两次或第二次并不重要)
In JavaScript, the first bind determines who "this" is? (Binding it twice or a second time doesn't matter)
如果bind(obj)
可以返回this
绑定到obj
的函数,那么不会
fn.bind(obj1).bind(obj2)
返回this
绑定到obj2
的函数?
看起来只有第一次绑定才会绑定它,而不考虑第二次绑定,或者如果我们绑定两次或两次以上?这是规格的一部分吗?
示例:http://jsfiddle.net/hah0L3nj/
var obj1 = { name: "Mike" },
obj2 = { name: "Mary" };
console.log(obj1, obj2);
function printName() {
console.log(this.name);
}
printName.bind(obj1)();
printName.bind(obj2)();
printName.bind(obj1).bind(obj2)();
最后一行将打印"Mike"。
我认为原因是bind
是这样实现的:
Function.prototype.myBind = function (obj) {
var self = this;
return function () {
self.call(obj);
}
};
参见http://jsfiddle.net/hah0L3nj/1/
因此,所做的是一个严格的界限,任何外部界限(额外的包装)都无关紧要。但我想知道bind
的其他实现是否可以做其他事情,以及规范中说了什么。
据我所知,函数.bind()不会修改函数本身。相反,它创建了一个新函数,一个包装器,当被调用时,它确保绑定的函数始终获得相同的上下文。除非将bind()的结果存储在变量中,否则它没有任何作用。
相关文章:
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 对象文字方法上的Javascript绑定不起作用
- Knockout输入绑定不起作用
- 双向绑定不会;我不在ES6工作
- 角度指令双向绑定不起作用
- 指令中选择输入的双向绑定不起作用
- Angularjs:ui路由嵌套状态下的绑定不起作用
- jQuery .on 绑定不触发
- 为什么角度绑定不't使用服务基元
- 为什么我的淘汰选项绑定不起作用
- jQuery Ajax 元素的后期绑定不起作用
- 角度 1 路绑定不影响性能
- 样式绑定不起作用
- Knockout自定义绑定不会't更新
- 在内联编辑的情况下,Knockout绑定不起作用
- 指令链接中的绑定不起作用
- Angular 1.5组件双向绑定不起作用
- 点击处理程序多次触发,解除绑定不起作用
- AngularJS与ng重复的OneTime绑定不会't让我刷新范围
- 敲除绑定不更新元素值