如何使用JSON创建从对象类型继承的对象?

Chr*_*ann 12 javascript inheritance json

我知道如何使用JSON创建对象,但似乎没有使用JSON来创建具有特定对象类型的对象.

这是一个Object的例子并创建它的一个实例:

Person = function() { };
Person.prototype = {
    FirstName: null,
    GetFirstName: function() {
        return this.FirstName;
    }
};

//Create an instance of the Person Object
var me = new Person();
me.FirstName = "Chris";
alert(me.GetFirstName()); //alert the FirstName property
Run Code Online (Sandbox Code Playgroud)

现在,我想使用JSON创建一个新的Person对象,以便GetFirstName函数对它起作用.

这是我想做的事情(但这段代码不起作用):

var you = new Person() { FirstName: "Mike" };
// OR
var you = new Person{ FirstName: "Mike" };
Run Code Online (Sandbox Code Playgroud)

无论如何使用JSON来创建特定类型的对象?

更新:我的样本与Person对象只是为了简化问题.实际上,我无法修改我需要创建实例的实际对象的构造函数.对象是第三方库的一部分.

更新:使用下面的一些建议,我能够找到一种方法来创建一个继承自原始对象的对象,并在其构造函数中接受JSON.这很整洁!

personWrapper = function(obj){
    for(var o in obj){
        this[o] = obj[o];
    }
};
personWrapper.prototype = new Person();

var you = new personWrapper({FirstName: "Chris"});
alert(you.GetFirstName());
alert(you instanceof Person); // returns True - we are successfully inheriting from Person!
Run Code Online (Sandbox Code Playgroud)

nic*_*ckf 13

我不这么认为.如果我是你,我会在Person类上创建一个函数来从JSON对象初始化.

function Person() {
    this.loadFromJSON = function(json) {
        this.FirstName = json.FirstName;
    };
}
Run Code Online (Sandbox Code Playgroud)

如果您事先不知道JSON对象所代表的是什么类,可能会在JSON中添加一个额外的变量.

{ _className : "Person", FirstName : "Mike" }
Run Code Online (Sandbox Code Playgroud)

然后有一个"构建器"功能来解释它.

function buildFromJSON(json) {
    var myObj = new json["_className"]();
    myObj.loadFromJSON(json);
    return myObj;
}
Run Code Online (Sandbox Code Playgroud)

更新:既然你说这个类是你无法改变的第三方库的一部分,你可以用原型扩展类,或者编写一个只在外部填充类的函数.

例如:

Person.prototype.loadFromJSON = function(json) {
    // as above...
};
Run Code Online (Sandbox Code Playgroud)

要么

function populateObject(obj, json) {
    for (var i in json) {
        // you might want to put in a check here to test
        // that obj actually has an attribute named i
        obj[i] = json[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这几乎就是Microsoft Ajax的工作原理.您定义了一个返回特定类型的方法.ajax层查询该类型并创建js对象代理.然后,所有json调用都返回一个'__type'参数,该参数告诉库使用哪个代理来实例化对象. (2认同)