javascript - Object.defineProperty 和返回值

标签 javascript object setter getter defineproperty

我正在使用一个 javascript 对象,它使用 Object.defineProperty 方法定义了一些 getter 和 setter。

function User() {       
    var _username;  
    var _id;

    Object.defineProperty(User, 'id', {
        get: function() {
            return _username;
        }       
    });         

    Object.defineProperty(User, 'username', {
        get: function() {
            return _username;
        },
        set: function(username) {
            this._username = username;          
        }
    }); 
}

对于其中一个属性 (id),我只想要一个 getter。最初我有一个拼写错误,它返回了_username的值,但我很快意识到上面的方法不起作用。只是出于好奇,我试图理解为什么它没有按预期工作。如果我执行以下操作:

var u = new User();
u.username = 'bob';
alert(u.username);
alert(u.id);

最后一条语句将警告 undefined 而不是 bob。这是为什么?有没有办法让它返回另一个属性?

最佳答案

您必须在 this 而不是构造函数上定义属性

function User(params) {       
   var _username;

   Object.defineProperty(this, 'id', {
        get: function() {
            return _username;
        }       
   });         

   Object.defineProperty(this, 'username', {
        get: function() {
            return _username;
        },
        set: function(username) {
            _username = username;          
        }
   }); 
   if (params && params.username) {
       this.username = params.username;
   }
}
User.prototype.stringify = function () {
    return JSON.stringify({ username: this.username});
}

关于javascript - Object.defineProperty 和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178681/

相关文章:

javascript - Uncaught TypeError : Object. values is not a function JavaScript

java - 在 maven-jaxb2-plugin 中插入自定义 setter

java - 如何使用 JDOM 设置 boolean 字段

带有 stdClass 对象的 PHP foreach 数组

javascript - 样式 "<object>"标记内部内容

java - 如何在 IntelliJ IDEA 中生成私有(private) setter

javascript - 具有特殊字符的正则表达式

javascript - 队列中的“for”循环,替换跨度标签的问题

javascript - 如何禁用提交按钮一周

javascript - Extn JS 4.2.0 网格分页不起作用