gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:03:47 33 4
gpt4 key购买 nike

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

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

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

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

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

var you = new Person() { FirstName: "Mike" };
// OR
var you = new Person{ FirstName: "Mike" };

有没有办法使用 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!

最佳答案

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

function Person() {
this.loadFromJSON = function(json) {
this.FirstName = json.FirstName;
};
}

如果您事先不知道 JSON 对象代表什么类,或许可以在您的 JSON 中添加一个额外的变量。

{ _className : "Person", FirstName : "Mike" }

然后有一个解释它的“构建器”函数。

function buildFromJSON(json) {
var myObj = new json["_className"]();
myObj.loadFromJSON(json);
return myObj;
}

更新:由于您说该类是您无法更改的第三方库的一部分,您可以使用原型(prototype)扩展该类,或者编写一个仅在外部填充该类的函数。

例如:

Person.prototype.loadFromJSON = function(json) {
// as above...
};

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];
}
}

关于javascript - 如何使用 JSON 创建从对象类型继承的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/185429/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com