我有一套我在整个应用中使用的javascript类。在一个案例中,我想从一个形状与我的类相匹配的ajax响应中评估一些json。javascript:铸造一个已经用eval创建的对象
我正在使用jquery parseJSON方法为我做eval。
唯一的问题是我现在想调用我的类中定义的方法,但是我知道该方法不会存在于eval对象上。
什么是使我的新对象可用这种方法最好的方法。有没有办法“施放”它?
我有一套我在整个应用中使用的javascript类。在一个案例中,我想从一个形状与我的类相匹配的ajax响应中评估一些json。javascript:铸造一个已经用eval创建的对象
我正在使用jquery parseJSON方法为我做eval。
唯一的问题是我现在想调用我的类中定义的方法,但是我知道该方法不会存在于eval对象上。
什么是使我的新对象可用这种方法最好的方法。有没有办法“施放”它?
在JavaScript中没有铸造的概念。相反,你可以修改你的类的构造函数来接受一个普通的对象。你如何做到这一点取决于您如何设置类,但可以简单地涉及对象的浅拷贝到类的新实例:
var MyClass = function (obj) {
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
this[i] = obj[i];
}
// Other class initialisation code
};
然后“投”你的对象是这样的:
var result = new MyClass(someObject);
如果您有需要此多个类,您可能希望创建一个extend
函数,它克隆了你(或者,如果你使用jQuery,这个功能已经存在):
var extend = function (obj1, obj2) {
for (var i in obj2) {
if (!obj2.hasOwnProperty(i)) continue;
obj1[i] = obj2[i];
}
};
然后“cast”像这样:
var result = new MyClass();
extend(result, someObject);
否则称为序列化和反序列化您的对象。 – Raynos 2011-02-23 23:26:14
有趣,虽然我不确定这个位“var result = new MyClass(someJson);”当然,“someJSON”或者需要在构造函数中被评估,或者它已经被评估过,在这种情况下,它应该被称为“someObject”? – 2011-02-23 23:28:04
@Raynos,不是真的。 OP已经使用'parseJSON'将其反序列化 - 他需要一种方法将其复制到某个类的实例中。 – 2011-02-23 23:28:40
我已经想了很长一段时间了。 – Kayla 2011-02-23 23:10:11
看看[我的答案在这里](http://stackoverflow.com/questions/5063558/javascript-overriden-method/5063837#5063837)。你可以用它来扩展你从JSON中获得的对象和你的“class”的原型。 (或者只是将数据从JSON复制到@ Box9很好地演示的“类”的对象;)) – 2011-02-23 23:25:43