我正在编写一些JS来证明一些概念,因为我是一个尝试学习JS和Node工作的新手。我在mozilla dev网站演示屏幕上写了以下内容(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind,没有真正重要的理由使用它,除了我发现像这样快速POCing非常方便):
正如您所看到的,我正在尝试理解绑定是如何工作的。在我的最后一段代码中,我有:
var funcagain = foo["bar"];
console.log(funcagain.bind(foo, 'whiskey'));
演示工具中的输出是:
> function () { [native code] }
我希望输出能够使用绑定功能并选择 foo 作为 this-arg 并输出: a-awhiskey
为什么不是这种情况而是我得到了一些意想不到的输出?
答案 0 :(得分:0)
您需要了解的是.bind()
方法实际上会返回一个函数,以后可以使用绑定上下文。
您必须调用返回的函数才能看到您想要的输出
或
您可以使用.call()
或.apply()
立即执行它们。
让我们试着看看绑定是如何运作的
Function.prototype.myBind = function(context) {
var self = this;
return function () {
return self.apply(context);
}
}
window.foo = 1;
var testContext = {
foo: 123
};
function oldFunc () {
console.log(this.foo);
}
var newFunc = oldFunc.myBind(testContext);
newFunc();

这是绑定函数的真正虚拟实现,但我希望您现在了解如何将上下文传递给函数并保存以供以后使用。
如需正确填充,请参阅MDN。