我有一堆从特定格式的 ajax 调用返回的 JSON 字符串,当我开始将它们全部转换为我自己的 Javascript 对象时,我开始怀疑是否有更简单的方法,因为我们在这里讨论的是 Javascript。
我将有 var manyOfThem = [ { name: 'a' }, { name: 'b' }, { name: 'c' } ];
我想轻松地将这些对象中的每一个与我的函数相关联,以便我可以执行以下操作:
myClass.prototype.doSomething = function() {
// do something to this.name
};
$.each(manyOfThem, function(index, item) {
item.doSomething();
});
我想我担心的是,我不想(因为它是重复的)这样做:
var myClass = function(item) {
this.name = item.name;
// do the same for the rest of item's potentially 20 properties
};
var oneOfThem = new myClass(manyOfThem[0]); // I think this is redundant....
oneOfThem.doSomething();
无论如何,如果还有(安全性?)原因让我只能忍受并手动完成它们,请也分享,谢谢!
最佳答案
你的意思是,类似(参见 jsfiddle ):
var MyClass = function() {};
MyClass.prototype = {
doSomething: function() {
alert(this.name);
}
};
然后
var manyObj = $.map(manyOfThem, function(obj) {
return $.extend( new MyClass(), obj );
});
所以你可以调用:
manyObj[0].doSomething(); // alert("a")
但是,这种方法不会保留与 manyOfThem
对象的直接副本。 (在上面的示例中,更改 manyOfThem[0].name = "foo";
不会影响 manyObj[0]
和对 manyObj[0] 的调用.doSomething();
仍会提醒 "a"
。要保留对对象的直接引用,请执行以下操作:
var manyObj = $.map(manyOfThem, function(obj) {
function F() {};
F.constructor = MyClass;
F.prototype = obj;
$.extend(F.prototype, new MyClass());
return new F();
});
manyObj[0].doSomething(); // alert("a")
manyOfThem[0].name = "foo"; // modify the referenced object
manyObj[0].doSomething(); // alert("foo") ..also modifies the behaviour of the instance
关于Javascript 将 JSON 字符串转换为函数实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15801465/