首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的绑定对象被忽略了?

问为什么我的绑定对象被忽略了?
EN

Stack Overflow用户
提问于 2017-03-24 12:09:33
回答 3查看 33关注 0票数 0

我试图用一个特定的require对象从一个this d节点模块调用一个方法。据我所见,有三种方法可以通过.bind(obj)(args)、.call(obj, arg1, ...)或.apply(obj, aryArgs)来实现。我目前正在使用bind,但我尝试了这三种方法,但都没有成功。

这就是我打电话的地方:

代码语言:javascript
复制
var library = require("./library.js");

// ...

requestHandler.bind(library)(req);

requestHandler是对此文件中导出的status函数的引用:

代码语言:javascript
复制
exports.status = () => {
  console.log(this);
  this.render({text: "status ok"});
};

exports.paramSwitching = () => {
  this.render("rendered via param switching");
};

exports.json = () => {
  this.render({json: {this: 'renders', as: 'json'}});
};

exports.view = () => {
  this.render({view: true, locals: {text: 'hi'}});
};

我希望这样做能够使status函数以library作为其this对象进行调用,因为这是定义render的地方。但是,console.log语句将this显示为保存status的文件的计算内容,即

代码语言:javascript
复制
{ status: [Function],
  paramSwitching: [Function],
  json: [Function],
  view: [Function] }

这里发生了什么,我该怎么解决?(或者,如果我做不到,因为Node做了一些奇怪的事情,有什么办法吗?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-24 12:15:00

您的请求处理程序使用箭头符号声明:

代码语言:javascript
复制
exports.status = () => {
  console.log(this);
  this.render({text: "status ok"});
};

通过设计,箭头符号在函数声明时捕获this。就好像是你干的那样:

代码语言:javascript
复制
exports.status = (function(){
  console.log(this);
  this.render({text: "status ok"});
}).bind(this);

这意味着status()函数已经绑定,不能反弹。解决方案是停止使用箭头函数:

代码语言:javascript
复制
exports.status = function(){
  console.log(this);
  this.render({text: "status ok"});
};
票数 1
EN

Stack Overflow用户

发布于 2017-03-24 12:14:42

箭头函数本身已经将函数体函数中的this绑定到它在其中定义的上下文的this。因此,您不能使用任何这些方法来更改this。

如果需要更改this,则不能使用箭头函数。

票数 1
EN

Stack Overflow用户

发布于 2017-03-24 12:16:18

我刚发完这个问题就想出来了。我在包含status的文件中使用了箭头函数, scope使用这个箭头函数,但是使用了封闭的上下文。

对这些函数调用bind、call或apply没有任何效果,因为this已经设置为函数的封闭上下文,在本例中,该上下文是eval'd文件。

将箭头函数切换到常规函数(将() =>更改为function ())已经解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42999152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档