绑定函数绑定到baz后,调用fn.apply(bar,)

想知道什么在JavaScript / Node.js优先

如果我这样做:

var baz = {}; var bar = {}; var fn = function foo(){}.bind(baz); fn.apply(bar, []); 

将总是有巴兹的背景? 任何原因为什么?

fn函数将始终将上下文设置为baz对象。 它是这样实现的,以确保在使用bind你将不会丢失任何上下文。

从MDN 描述的bind()方法:

bind()函数创build一个新的函数(一个绑定函数),该函数具有与被调用的函数(绑定函数的目标函数)相同的函数体(ECMAScript 5术语中的内部调用属性),并将此值绑定到bind()的第一个参数, 不能被覆盖


绑定函数可以接收另一个上下文时有一个例外: fn被调用为构造函数: var o = new fn() 。 在这种情况下,上下文将成为新的实例对象(但这应该避免和用于构造函数的正常function)。

本章详细介绍.bind()方法。

你为什么不testing

 var baz = {a:1}, bar = {a:2}, fn = function(){console.log(this.a)}.bind(baz); fn(); // 1 fn.apply(bar); // 1 so bind takes precedence fn.call(bar); // 1 so bind takes precedence