方法作为原型中的属性

Method as a properties in prototypes

本文关键字:属性 原型 方法      更新时间:2023-09-26

是否有办法强制一个原型的方法(函数)是一个属性?

假设我有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时都被执行?

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