繁体   English   中英

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

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

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

如果我这样做:

var baz = {};
var bar = {};

var fn = function foo(){}.bind(baz);

fn.apply(bar, []);

fn 会一直有 baz 的上下文吗? 有什么理由吗?

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

来自bind()方法的 MDN 描述

bind() 函数创建一个新函数(绑定函数),其函数体(ECMAScript 5 术语中的内部调用属性)与它被调用的函数(绑定函数的目标函数)相同,并且 this 值绑定到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM