方法作为原型中的属性

时间:2015-08-22 22:41:18

标签: javascript oop methods properties prototype

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

假设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时都设置。

每次拨打getBar()时,我有什么方法可以执行foo.bar吗?

1 个答案:

答案 0 :(得分:1)

您可以使用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