我从服务器接收到一些JSON对象,我希望用已经定义的方法“强制转换”或“祝福”它。有没有办法为普通的JSON对象设置原型?
function MyClass(someValue) {
this.myProperty = someValue;
}
MyClass.prototype.someMethod = function() { return "Here's " + this.myProperty + "!"};
var json = {myProperty : 'someValue'};
// ??? json.prototype = MyClass doesn't work, of course.
var result = json.someMethod();
我该怎么做?
答案 0 :(得分:3)
好吧,我可以建议试试这些:
通过向所有Javascript对象添加所需的功能(不良做法)
Object.prototype.lol = function() { alert(this.a); };
var x = {a : 'b'};
x.lol();
通过函数“扩展”JSON:
var json = {a : 'b', b : 123};
function extend(obj) {
obj.func1 = function(param) {
alert(this[param]);
}
}
extend(json);
json.func1('b');
通过将对象“制作”为函数:
var json = {a : 'b', b : 123};
function extendToFunc(obj) {
var theLibrary = function(obj) {
/**
* The same as above.
*/
this.func1 = function(param) {
alert(obj[param]);
}
};
return new theLibrary(obj);
}
var jsonFunc = extendToFunc(json);
jsonFunc.func1('b');
或者您可以使用JS框架。或者你能想到的任何其他方法:)我的例子很简单,它们可以扩展到你需要的任何复杂的东西。
答案 1 :(得分:1)
行。这是答案(IE不兼容):
json.__proto__ = MyClass.prototype;
谢天谢地,我的申请表中不需要%$ @ $%#IE。
(当我这样做时,还有另一种可能性:在MyClass原型中创建一个包装器函数,它将所有属性从JSON复制到新对象;浅层复制应该足够了。)