在对象中创建瞬态JavaScript变量

时间:2016-04-28 07:29:17

标签: javascript oop

function Player(name)
    {            
        this._name = name;                     
        this._id = "Player"+(Player_ID++);
    };

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

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

2 个答案:

答案 0 :(得分:2)

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

来自MDN article的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

答案 1 :(得分:1)

如果您不需要枚举此属性,则可以使用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));