从JSON创建一个对象,并在Javascript中给它一些方法
Making an object from JSON and giving it some methods in Javascript
我通过$.ajax请求从API返回JSON,最终得到一堆JSON:
var result = {
"status": 200,
"offset": 5,
"limit": 25,
"total": 7,
"url": "/v2/api/dataset/topten?",
"results": [
{
"datasets": [
"dataset",
"tt_all"
],
"id": "Hxb6VtpFRQ9gEr",
"title": "Venues",
"type": "topten",
"url": "/v2/dataset/topten/Hxb6VtpFRQ9gEr"
},
}
或类似的东西。在较大的请求中包含更多结果的嵌套数组。
我想解析这些信息,将其放入一个对象中,并具有可用于该对象的方法,以从各个级别提取特定信息位 - 例如:
result.title => "Venues" or result.id => "Hxb6v...."
但是,AJAX 请求的输出可以由用户定义的 var 分配给 var,因此我想创建一个函数,在它退出 ajax 成功函数并分配给结果或其他任何内容之前,将其粘贴到具有可用方法的对象中。
我不是特别想说:
Object.prototype.method = function(){ // extend Object here }
方法,因为它使人生气。
如果我制作另一个对象来扩展原型:
function Datalump(){};
Datalump.prototype.title = function(){
// get title or something here
};
我正在为传递给什么而苦苦挣扎,并将事情分配给错误的东西。
我该如何进行此方法/对象创建?
任何建议或指示将不胜感激。
更新:谢谢大家的帮助 - 这非常有启发性。我已经将迈克·布兰特的答案标记为正确,因为它似乎最适合我提出的问题。乔治·杰空的回答也是一次非常有用的学习经历。
实际上,我在项目中的方向略有不同(新要求!),但所有答案中的部分可能会进入"alpha"。
非常感谢大家。
如果你有一个javascript对象(就像你在JSON被解析为对象之后得到的),你可以像这样添加任何你想要的方法:
result.getTitle = function() {
// return title value of interest
return this.results.title;
}
result.getId = function() {
// return id value of interest
return this.results.id;
}
这里result
是解析 JSON 后拥有的对象。
创建一个包装 JSON 结果的模块。 该模块将返回原始结果,以及您可能需要的任何便利方法。 然后使用下划线.js特别是 _.result 与包装的结果进行交互。 这样,您无需关心是访问包装结果的原始属性之一还是访问一种方便的方法。
var wrappedResult = WrappedResult(result);
var status = _.result(wrappedResult, 'status');
var foobar = _.result(wrappedResult, 'foobar');
如果 _.result 的便利性被冗长所抵消,您可以直接调用wrappedResult.status
或wrappedResult.foobar()
包装结果的实现:
var WrappedResult = function(result) {
return _.extend({}, result, {
foobar: function() {
console.log('foobar');
}
}
}
无论如何,类似上面的东西;你可能想扩展_.clone(result)。
顺便说一句,下划线.js绝不是必需的,尽管在这种情况下,它可以很好地准确描述您正在做什么(除了初始属性之外,您还可以使用一些方法"_.extend"结果)。 相反,用对象包装结果,然后直接添加方法,类似于另一个答案:
var WrappedResult = function(result) {
result.foobar = function() {
console.log('foobar');
};
return result;
}
- object.仅冻结对象方法.JavaScript
- 快速方法 Javascript/Jquery/etc 检索表单中包含的所有 aspnet:textbox (input)
- 查看整个画布是否被涂成一种颜色的方法.Javascript + processing.js
- 从方法 JavaScript 访问对象变量
- pop()方法javascript没有给出完整的输出
- 如何格式化setInterval方法JavaScript的运行时间
- 正则表达式/替换方法Javascript
- 将vars传递给其他方法javascript
- 寻找一种简化if/else语句的方法.javascript
- focus()或select()方法javascript,在Chrome中性能缓慢
- 未捕获的类型错误:对象没有方法..Javascript
- 对象方法javascript中的方法/函数
- 构造函数中的私有方法(Javascript,坏主意?)
- 查看数组是否有数组的最简单方法?Javascript
- 扁平化数组元素(不是整个数组)的有效方法JavaScript
- 最常用的生成PDF报告的方法(JavaScript,node.js)
- 创建多维数组与地图方法:javascript
- 对象方法Javascript HTML DOM中的多个事件监听器
- 卡住了.adddeventlistener不能在属性内处理我的方法.Javascript
- 任何获取文档选择的x、y、w、h的方法(JavaScript)