Javascript 将 JSON 字符串转换为函数实例

标签 javascript jquery json

我有一堆从特定格式的 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/

相关文章:

javascript - Ajax加载本地json文件

javascript - 如何在 Threejs 中正确加载 Json 文件

javascript - 具有固定标题问题的容器上的水平滚动条

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?

javascript - 从服务器 react-native 动态获取本地化字符串

javascript - 如何在点击链接时禁用链接?

javascript - 在页面或元素加载时调用 JS

jQuery addClass 到 parent 和它的 sibling

json - 将 JSON 文件读入 Pandas 时出错

javascript - 缺少 jQuery Mobile js 会扰乱我页面上的某些元素