javascript - 在 Getters 后面封装方法

标签 javascript node.js express

我正在使用 node.js/express 堆栈开发一个网站,我正在尝试以对我来说很新的函数式风格进行开发。 express 方式res.send要求将函数作为方法调用,因为它在函数体中引用 this,但调用方法在函数式风格中并不自然。

你可以把这个方法放在一个 getter 函数后面,把它变成一个函数,但我不知道除了代码复杂之外还有什么缺点吗?

例子:

(function() {
"use strict";

function Foo() {
  function bar() {
    console.log(this.x);
  }
  return {
    bar,
    get baz() {
      var s = this;
      return () => s.bar();
    }
  }
}

var a = new Foo();
a.x = 5;
a.bar();
a.baz();

var b = a.bar;
var c = a.baz;
//b(); // throws an error because `this` is not defined
c();

function wrapper(f) {
  f();
}

//wrapper(a.bar); // throws an error
wrapper(a.baz);

})();

最佳答案

最终这取决于您的确切用例,但添加包装函数在 javascript 和 Node 中非常典型,不太可能增加任何缺点。您可以修复调用 wrapper(a.bar); 时看到的错误//使用 bind 抛出错误 ,如下:

包装器(a.bar.bind(a));

调用 bind 将确保 this 在稍后调用该函数时被适本地设置。

这是一个演示:https://jsfiddle.net/zuL9g98m/

关于javascript - 在 Getters 后面封装方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625759/

相关文章:

node.js - 防止在node js中直接访问html页面

node.js - 如何使用 TypeScript 将输入 JSON 对象转换为 Node.JS 中的模型类?

node.js - 在 Azure 上部署 Nodejs 但收到 404

javascript - 使用 Typescript 在 Node.js 中读取文件

node.js - 在循环中向 EJS 显示 MongoDB 文档值

javascript - 从 RxJS4 迁移到 RxJS5 - 实现观察者

javascript - Mongoose 模式无法读取未定义的属性 'password'

javascript - Webpack - 代码分割 : split library into it's own file

javascript - 关闭 MUI Snackbar 通知并对按键执行操作

javascript - 如何使用对象条目创建对象数组?