为什么在这个mozilla JS开发工具中使用bind返回“本机代码”?

时间:2018-06-13 23:30:33

标签: javascript

我正在编写一些JS来证明一些概念,因为我是一个尝试学习JS和Node工作的新手。我在mozilla dev网站演示屏幕上写了以下内容(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind,没有真正重要的理由使用它,除了我发现像这样快速POCing非常方便):

screenshot-mozilla.img

正如您所看到的,我正在尝试理解绑定是如何工作的。在我的最后一段代码中,我有:

var funcagain = foo["bar"];
console.log(funcagain.bind(foo, 'whiskey'));

演示工具中的输出是:

> function () { [native code] }

我希望输出能够使用绑定功能并选择 foo 作为 this-arg 并输出: a-awhiskey

为什么不是这种情况而是我得到了一些意想不到的输出?

1 个答案:

答案 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