javascript - 将原型(prototype)添加到 JSON 字符串中的所有对象

标签 javascript json inheritance prototype

我希望针对从数据库收到的记录创建一个方法原型(prototype)。

我找到了 this answer已经,但它要求您为每个已有的对象实例化一个新对象。这看起来工作量很大,但可能是唯一的方法。

有没有一种方法可以将方法原型(prototype)化到 JSON 字符串中的所有对象上,而不涉及为每条记录实例化一个新对象?

最佳答案

正如我在评论中所说,您可以在 JSON 解析中使用一个简单的 reviver 函数,只要您记住这些键即可。看到这个 jsFiddle:http://jsfiddle.net/38Ytc/3/ 这是一个示例,假设您在某处获得了 JSON 字符串(在示例中,来自文本框),并且您需要向该数据返回的对象添加某些功能。然后我们用 reviver 函数作为第二个参数调用 parse,它将为数据结构中的每个键调用。对于我们的最小示例,它会将除顶级对象(键“”)之外的所有非数组对象转换为 DataRow 对象,该对象具有方法 getset保存

var inputEl = $("#exampleInput");
var outputEl = $("#exampleOutput");

function DataRow(contents) {
    this.object = contents;
}
DataRow.prototype.get = function(key) {return key?this.object[key].object:this.object;};
DataRow.prototype.set = function(key, val) {if (key) {this.object[key] = val;} else {this.object = val;};};
DataRow.prototype.save = function() {/*Save to DB or whatever*/};

inputEl.change(function() {
    var resultObject = JSON.parse( inputEl.val(),function(key, val) {
        if (key === "" || typeof val === Array) { //See MDN for why this is necessary
            return val;
        } else {
            return new DataRow(val);
        }
    });
    console.log(resultObject.entries.object[0].get("title"));
    outputEl.val(JSON.stringify(resultObject));
});

完成此处理后,您可以简单地使用 resultObject.entries.object[0].get("title") 获取对象的标题(如果存在)。

引用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

关于javascript - 将原型(prototype)添加到 JSON 字符串中的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20552608/

相关文章:

javascript - iframe 的高度不会使用 CSS 根据外部 div 高度调整大小

javascript - 我的 Node.js 应用程序的 react 速度很慢

jquery - 如何获取JSON数据名称

python - 在所有 python 对象上注入(inject)辅助函数?

java - 子类成员变量对另一个子类的可见性

c++ - 如何将子类对象添加到其父类的 vector 中 (C++)?

javascript - 新的 Firebase () 函数已弃用?

javascript - 在django模板中单击按钮时播放音频

java - Jackson - 将单个 json 键映射到多个变量

php - 访问属性名称中包含不允许字符的对象属性