方法作为原型中的属性

Method as a properties in prototypes

有没有办法强制原型的方法(函数)成为 属性?

假设我有 Foo 方法 bar:

Foo.prototype.bar = function getBar() {
    return something
}

要调用bar,我可以简单地调用foo.bar();,但是我希望bar成为Foo的属性,而不是方法,意思是foo.bar;.为此,我可以简单地使 getbar() 成为一个自调用函数:

Foo.prototype.bar = (function getBar() {
    return something
})();

现在 .bar 可以作为 属性 调用。 但是 问题是 bar 仅在创建 Foo 的实例时设置,而不是每次调用 .bar 时设置。

有什么方法可以让我每次调用 foo.bar 时都执行 getBar() 吗?

您可以使用 getter:

function Foo () {
    this.x = 1;
};

// Example of adding a getter to Foo.prototype
Object.defineProperty(Foo.prototype, 'bar', {
  get: function getBar () {
    return this.x++;
  }
});

var tmp = new Foo;

tmp.bar; // 1
tmp.bar; // 2
tmp.bar; // 3