【问题标题】:How to set the class of a JavaScript object如何设置 JavaScript 对象的类
【发布时间】:2013-01-12 05:31:34
【问题描述】:

我考虑使用JSON.stringify 保存对象,然后再次加载它们。 “字符串化”当然效果很好,但是我不确定如何设置对象的原型/类。

【问题讨论】:

  • 仅供参考 JSON.stringify 并非在所有浏览器版本上......
  • 您能举个例子说明您想要达到的目标吗?
  • @RoyiNamir 但可以从json.org单独下载。
  • @MichaelTodd 你看到我评论中的前 3 个字母了吗:-)?
  • @RoyiNamir 嗯...那又怎样? :)

标签: javascript


【解决方案1】:

您可以使用.toJSON 和 reviver 回调来实现此目的。

方案如下:

function Person() {
    this.name = "name";
    this.age = "age";
}

Person.prototype.toJSON = function() {
            //Define this for other classes as well
    return {__class__: "Person", name: this.name, age: this.age};
};

function reviver( key, value ) {
        if( typeof value == "object" && value.__class__ ) {
            var ret = new window[value.__class__];
            for( var k in value ) {
                if( k === "__class__" ) continue;
                ret[k] = value[k];
            }
            return ret;
        }
        return value;
}

var a = new Person(),
    b = new Person();

var json = JSON.stringify( [a,b] );

var decoded = JSON.parse( json, reviver);

console.log( decoded ); //[Person, Person] I.E. array of Person instances instead of plain objects

在这个简化的方案中,类必须是全局的。

【讨论】:

  • 绝妙的答案。 (ps在现实生活中,我应该嵌入json字符串是什么类型的对象吗?)
  • 测试您的代码,恕我直言,您在new window[value.__class__]; 之后错过了()
  • @RoyiNamir ()new 之后是不必要的
  • 没关系,为什么浏览器会警告我……你为什么使用new window [...]
  • @RoyiNamir 在第二个中,我们也可以使用一个变量.. 比如var a = "prop" 然后obj[a]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 2011-09-20
  • 2021-07-26
  • 2022-12-11
  • 2010-12-27
相关资源
最近更新 更多