admin管理员组文章数量:1402288
function Player(name)
{
this._name = name;
this._id = "Player"+(Player_ID++);
};
var newPlayer = new Player(newUnitName);
alert(JSON.stringify(newPlayer));
What I want to do is stop displaying the id value. Is there a way to make the id variable tranient. Please help
function Player(name)
{
this._name = name;
this._id = "Player"+(Player_ID++);
};
var newPlayer = new Player(newUnitName);
alert(JSON.stringify(newPlayer));
What I want to do is stop displaying the id value. Is there a way to make the id variable tranient. Please help
Share Improve this question asked Apr 28, 2016 at 7:29 jayangaVliyanagejayangaVliyanage 832 silver badges12 bronze badges 1- 2 Possible duplicate of json stringify : How to exclude certain fields from the json string – James Thorpe Commented Apr 28, 2016 at 7:34
3 Answers
Reset to default 4Every object has a method toJSON()
, which is invoked when the object should be serialize using JSON.stringify()
.
From MDN article on JSON.stringify():
If an object being stringified has a property named
toJSON
whose value is a function, then thetoJSON()
method customizes JSON stringification behavior: instead of the object being serialized, the value returned by thetoJSON()
method when called will be serialized
The following example creates a different serialization function, which will exclude the _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'}
Check the working demo.
If you don't need to enumerate over this property you can use non-enumerable properties:
function Player(name)
{
this._name = name;
Object.defineProperty(this, '_id', {
enumerable: false
});
};
var newUnitName = "Foo";
var newPlayer = new Player(newUnitName);
alert(JSON.stringify(newPlayer));
Targeting ES2022, you can achieve transient variables at least in 2 ways:
- Using a private variable
- Using an "accessor" variable
"use strict";
class Example {
constructor() {
this.#aTransientValue_accessor_storage = "transient";
this.aNormalValue = "public";
this.#aPrivateValue = "public";
}
#aTransientValue_accessor_storage;
get aTransientValue() { return this.#aTransientValue_accessor_storage; }
set aTransientValue(value) { this.#aTransientValue_accessor_storage = value; }
#aPrivateValue;
}
const example = new Example();
console.log(example); /// prints { "aNormalValue": "public" }
Typescript even introduced the "accessor" keyword, which can be used for this purpose.
Here is the TS equivalent code:
class Example {
accessor aTransientValue = "transient";
public aNormalValue = "public"
#aPrivateValue = "public"
}
const example = new Example();
console.log(example);
本文标签: oopCreate transient JavaScript variable in an objectStack Overflow
版权声明:本文标题:oop - Create transient JavaScript variable in an object - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744352183a2602116.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论