首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript.bind - ES5 Vs ES6

Javascript.bind - ES5 Vs ES6
EN

Stack Overflow用户
提问于 2016-07-17 06:11:01
回答 2查看 867关注 0票数 1

如何在ES6中使用bind?

在预ES6编码方式(我假设这是ES5)中,我会这样做:

代码语言:javascript
运行
复制
var app = {};
app.log = function(req, res) {
    var respond = this.respond.bind(this, req, res);
    return respond(400, 'no data received');
}

app.respond = function(req, res, status, message) {
    console.log(req); // hello
    console.log(status); // 400
    console.log(message); // no data received
}

app.log('hello');

但是我如何在ES6中做到这一点呢?

代码语言:javascript
运行
复制
export default function log (req, res) {
    var respond = this.respond.bind(this, req, res);
    return respond(400, 'no data received');
}

function respond (req, res, status, message) {
    console.log(req); 
    console.log(status); 
    console.log(message); 
}

当然,我会得到一个错误:

代码语言:javascript
运行
复制
TypeError: Cannot read property 'respond' of undefined
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-17 06:37:43

在这种情况下,我认为你不必使用出口。做个课就行了。

代码语言:javascript
运行
复制
class App {

    log(req, res) {
        var respond = this.respond.bind(this , req , res);
        return respond(400, 'no data received');
    }

    respond(req, res, status, message) {
        console.log(req);
        console.log(status);
        console.log(message);
    }

}

var app = new App();
app.log('hello');
票数 -1
EN

Stack Overflow用户

发布于 2016-07-17 11:22:10

您正在获取错误,因为您正在访问this.respond。但是log (和respond)不再是对象方法了,所以this不使用respond方法来引用对象。相反,您只需直接引用函数(respond):

this.respond(...)变成respond(...)

但是,根本没有理由使用.bind,甚至在ES5解决方案中也是如此(您从未在respond中使用this )。

您要做的就是调用这个函数:

代码语言:javascript
运行
复制
export default function log (req, res) {
  return respond(req, res, 400, 'no data received');
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38418449

复制
相关文章

相似问题

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