我正在尋找將方法原型化到從數據庫接收的記錄上。將原型添加到JSON字符串中的所有對象
我發現this answer已經存在,但它要求您爲每個已有對象實例化一個新對象。這似乎很多工作,但可能是唯一的方法。
有沒有一種方法將方法原型化到JSON字符串中的所有對象上,而不涉及爲每條記錄實例化一個新對象?
我正在尋找將方法原型化到從數據庫接收的記錄上。將原型添加到JSON字符串中的所有對象
我發現this answer已經存在,但它要求您爲每個已有對象實例化一個新對象。這似乎很多工作,但可能是唯一的方法。
有沒有一種方法將方法原型化到JSON字符串中的所有對象上,而不涉及爲每條記錄實例化一個新對象?
正如我所說的評論,你可以爲你保留鍵記住使用一個簡單的齊磊功能的JSON解析中,只要。看到這個jsFiddle:http://jsfiddle.net/38Ytc/3/ 這是一個例子,假設您在某處(例如,從文本框中)獲取了JSON字符串,並且需要將某些函數添加到由此數據返回的對象中。然後我們調用parse
作爲第二個參數的reviver函數,這將在數據結構中調用每個鍵。對於我們最簡單的例子,它會將除頂層對象(鍵「」)以外的所有非數組對象轉換爲DataRow對象,該對象具有方法get
,set
和save
。
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
在這種情況下,你甚至不需要調用bind(),除非你想通過'this'關鍵字訪問對象的屬性。如果您不需要的對象訪問,你可以簡單地這樣做:
var records = [{'val':1},{'val':2}];
records.forEach(function(record){
record.someMethod = function(){
console.log('Some action');
}
});
records[1].someMethod();
records[0].someMethod();
這不是真正的原型,但它只是循環和附加一個方法。不幸的是,我試圖通過利用原型來避免這種情況。 –
考慮使用齊磊自動生成包裝對象: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse – Kroltan