Getters背后的封装方法

时间:2016-06-04 02:28:25

标签: javascript node.js express

我正在使用node.js / 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);

})();

1 个答案:

答案 0 :(得分:1)

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

wrapper(a.bar.bind(a));

调用bind将确保在稍后调用该函数时将this设置为正确。

以下是演示:https://jsfiddle.net/zuL9g98m/