【问题标题】:Create transient JavaScript variable in an object在对象中创建瞬态 JavaScript 变量
【发布时间】:2016-04-28 15:47:06
【问题描述】:
function Player(name)
    {            
        this._name = name;                     
        this._id = "Player"+(Player_ID++);
    };

var newPlayer = new Player(newUnitName);
alert(JSON.stringify(newPlayer));

我想要做的是停止显示 id 值。有没有办法使 id 变量瞬态。 请帮忙

【问题讨论】:

标签: javascript oop


【解决方案1】:

每个对象都有一个方法toJSON(),当应该使用JSON.stringify() 序列化对象时调用该方法。

来自MDN article on JSON.stringify():

如果一个被字符串化的对象有一个名为toJSON的属性,其值 是一个函数,那么toJSON()方法自定义JSON 字符串化行为:不是被序列化的对象,而是 toJSON()方法调用时返回的值会被序列化


以下示例创建了一个不同的序列化函数,它将排除_id

var Player_ID = 0;
function Player(name) {            
 this._name = name;                     
 this._id = "Player"+(Player_ID++);
 this.toJSON = function() {
   return {
     _name: this._name
   };
 };
};

var newPlayer = new Player('Name 1');
console.log(JSON.stringify(newPlayer)); // prints {"_name": 'Name 1'}

检查工作的demo

【讨论】:

    【解决方案2】:

    如果你不需要枚举这个属性,你可以使用non-enumerable属性:

        function Player(name)
            {            
                this._name = name;                     
                Object.defineProperty(this, '_id', {
                  enumerable: false
                });
            };
    
        var newUnitName = "Foo";
        var newPlayer = new Player(newUnitName);
        alert(JSON.stringify(newPlayer));

    【讨论】:

    • 我们如何访问console.log(newPlayer._id)
    猜你喜欢
    • 2012-01-22
    • 1970-01-01
    • 2012-04-01
    • 2011-08-15
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    相关资源
    最近更新 更多