将函数绑定到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会一直有巴兹的背景吗?为什么?
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
相关文章:
- Javascript:如何获取函数.apply()的键
- 另一个if(!$scope.$$phase)$scope$apply()szenario-需要帮助才能通关
- call()和apply()实际上是用来欺骗方法处理类似数组的对象的
- jQueryUI Progress Bar
- Angular Apply已经在进行中
- 是否可以在不更改上下文的情况下调用函数.apply
- Error: timers.js:234 callback.apply(timer, args);
- 在lodash上有没有一个替代方案.merge.apply(_,x);其中x是对象的数组
- How to apply javascript on <asp:Buttonfield>?
- $scope.apply()何时应用于angular
- 将参数作为不带.apply()的数组传递
- AngularJS$apply有时不会;当在highchart中使用click事件时,t触发更新{{}}中html标记中
- 如何通过 Function.prototype.apply() 更改调用函数的参数
- 如何向.apply()方法添加回调
- 在使用AngularJS时,我应该在$apply和$watch之间使用哪个
- 使用$scope的最佳实践$apply();或者甚至是使用Angular Component的非Angular内容中的$
- 通过fn.apply或fn.bind将函数传递给setTimeout
- Angular $scope更新、导航和 $scope.$apply() 后不绑定到视图
- scope.$apply 是未定义的,在 scrolly 指令中不起作用
- 将函数绑定到baz后调用fn.apply(bar,[])