我正在写一些JS来证明一些概念,因为我是一个新手,试图学习JS和Node的工作。我已经在mozilla dev site演示屏幕上写了以下内容(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind,除了我发现像这样做快速POCing非常方便之外,没有其他重要的原因使用它):
正如您所看到的,我正在尝试了解bind是如何工作的。在我的最后一段代码中,我有:
var funcagain = foo["bar"];
console.log(funcagain.bind(foo, 'whiskey'));
demo工具中的输出是:
> function () { [native code] }
我希望输出能够使用绑定功能,并选择foo作为this-arg,并具有输出:a-a awhiskey
为什么不是这样,而是我得到了一些意想不到的输出?
发布于 2018-06-14 07:57:34
您需要了解的是,.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();
这是绑定函数的一个真正的虚拟实现,但我希望您现在了解上下文是如何传递给函数并保存以供以后使用的。
有关正确的polyfill,请参阅MDN。
https://stackoverflow.com/questions/50847679
复制相似问题