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

Calling fn.apply(bar,[]) after binding function to baz

本文关键字:bar apply fn 绑定 函数 baz 调用      更新时间:2023-12-20

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

如果我这样做:

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

fn会一直有巴兹的背景吗?为什么?

fn函数将始终将上下文设置为baz对象。通过这种方式实现它可以确保在使用bind之后不会丢失上下文。

来自bind()方法的MDN描述:

bind()函数使用与调用它的函数(绑定函数的目标函数),该值绑定到bind()的第一个参数,其不能被覆盖


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

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

为什么不测试

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