isFlag 而不是 isFlag() 语法:在 Javascript 中可能吗?

isFlag instead of isFlag() syntax : is it possible in Javascript

本文关键字:isFlag Javascript 语法      更新时间:2023-09-26

在下面的代码中,我定义了 Greeter.prototype.isVeryPolite = function () {...用于访问this._isVeryPolite

greeter.isVeryPolite()

但是最后的"()"不是很用户友好。javascript中是否有一个技巧可以在不直接访问成员的情况下拥有greeter.isVeryPolite?

https://jsfiddle.net/5r4so2Ld/

var Greeter = (function () {
    function Greeter(message, flag) {
        this._name = message;
        this._isVeryPolite = flag;
    }
    Greeter.prototype.greet = function () {
        if (this._isVeryPolite) {
            return "How do you do, " + this._name;
        }
        else {
            return "Hello " + this._name;
        }
    };
    Greeter.prototype.isVeryPolite = function () {
        return this._isVeryPolite;
    };
    return Greeter;
})();
var greeter = new Greeter("world", true);
var button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function () {
    alert(greeter.greet());
    alert(greeter.isVeryPolite());
};
document.body.appendChild(button);

听起来你正在寻找一个getter。一个例子(取自MDN):

var log = ['test'];
var obj = {
  get latest () {
    if (log.length == 0) return undefined;
    return log[log.length - 1]
  }
}
console.log (obj.latest); // Will return "test".

您可以使用 Object.defineProperty 方法来定义 getter:

    Object.defineProperty(Greeter.prototype, "isVeryPolite", 
    {
       get: function() {return this._isVeryPolite; },
    });
您可以使用

Object.defineProperty来保持原型模式,并且仍然使用getter模式。

Object.defineProperty(Greeter.prototype, "isVeryPolite", {
    get: function isVeryPolite() {
        return this.isVeryPolite;
    }
});