给出以下代码:
function Person(firstName, lastName) {
this.FirstName = firstName;
this.LastName = lastName;
}
Person.prototype.showFullName = function() {
return this.FirstName + " " + this.LastName;
};
var person = new Person("xx", "xxxx");
var jsonString = JSON.stringify(person);
var thePerson = JSON.parse(jsonString);
我的目标是能够在thePerson上调用“showFullName”。虽然我理解JS并不真正有对象,但它必须有某种方式可以说某些事情应该以某种方式处理,比如将thePerson
转换为Person
。
答案 0 :(得分:2)
这是不可能的。
您无法使用以前的方法将JSON字符串转换为对象。
答案 1 :(得分:2)
据我所知,最好的方法是首先构造一个vanilla对象,然后使用类似jQuery的extend将数据放到它上面,即
。var thePerson = new Person(); // and make sure the constructor gracefully handles no arguments
jQuery.extend(thePerson, JSON.parse(stringData));
如下所述,如果您只是创建一个浅拷贝,则不需要使用extend
。您可以遍历已解析数据的属性并将它们复制到目标对象上。
答案 2 :(得分:2)
就像大多数在其他语言中都有语言结构的东西一样,即使你不能直接做到这一点,在Javascript中还有一种解决方法。只需将对象设置为接受它作为构造函数公开的所有数据:
var data = JSON.parse(jsonString);
var person = new Person(data);
从头开始:
var person = new Person({ FirstName: "xx", LastName: "xxx"});
(nb - 您可以使用$.extend
等来更新现有实例 - 但通常最好使用构造函数,以便您可以控制传入的对象的处理;例如,可能想要忽略除传入的对象的某些属性之外的所有属性。
答案 3 :(得分:0)
虽然我知道JS确实没有对象,但它必须具有 某种方式能够说些什么应该被对待 方式。
不正确。 JS中有很多对象;函数本身就是对象。 AFAIK唯一不是对象的东西是原始类型。也许你的意思是Javascript没有类的概念。这是正确的,因为JS使用原型继承。
从一般意义上说,在JS中,施放是没有意义的。如果你这样做
x.someMethod()
如果在x
上定义了someMethod,则会触发,无论x
是什么类型。它被称为鸭子打字。
JSON.parse
创建object literal
。您可以做的最好的事情是创建一个构造函数,该构造函数将对象文字初始化实例的值。
答案 4 :(得分:0)
您可以创建一种包装类,您可以将对象提供给构造函数,它会将每个属性设置为该对象的属性。您可以将其设为“基类”,以便将其用于所有类型的对象。这样,您只需要创建一个从该基类“继承”的类的新实例,并将其与您的对象一起提供。类似于http://backbonejs.org/
中使用的模型