方法作为原型中的属性
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
有没有办法强制原型的方法(函数)成为 属性?
假设我有 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