Javascript 如何为JSON对象设置原型?
我从服务器接收到一些JSON对象,我想将其“类型转换”或“祝福”到一个具有已定义方法的对象。有没有办法为普通JSON对象设置原型Javascript 如何为JSON对象设置原型?,javascript,oop,json,casting,Javascript,Oop,Json,Casting,我从服务器接收到一些JSON对象,我想将其“类型转换”或“祝福”到一个具有已定义方法的对象。有没有办法为普通JSON对象设置原型 function MyClass(someValue) { this.myProperty = someValue; } MyClass.prototype.someMethod = function() { return "Here's " + this.myProperty + "!"}; var json = {myProperty : 'someV
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();
我该怎么做呢?好的。以下是答案(即不兼容):
谢天谢地,我的申请中不需要%$@$%#IE
(当我这样做时,还有另一种可能性:在MyClass prototype中创建一个包装函数,将JSON中的所有属性复制到新对象中;浅层复制应该足够了)。好吧,我可以建议尝试以下方法:
- 通过向所有Javascript对象添加所需的函数(糟糕的做法)
- 通过使用函数“扩展”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');
- 通过“使”对象成为函数:
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框架。或者你能想到的任何其他方法:)我的例子很简单,它们可以扩展到你需要的任何复杂的东西。我不知道这在Safari或Chrome中是否有效。你所说的“其他可能性”实际上是最好的方法。@Pointy我已经测试过了,它确实存在。对于IE,我发现了一个很酷的hack,可以用来代替proto:。好吧,好吧,它不是标准化的(即使使用ECMAScript 5),所以使用它的风险自负:-)@pointy-lolz。首先是“好的部分”,现在是“坏的部分”。我知道第一个问题是谁写的,看起来好像有人在写第二个。找到一个完美的问题来匹配我目前的问题,但却有一个不适合我需要的答案,真令人失望。复制属性看起来并不像一颗神奇的子弹那么迷人!一个接一个地手动添加这些函数违反了程序员最重要的优点:懒惰。你不必手动添加它们。您可以为此构建一个小框架。它将添加您希望的所有必要方法——您只需通过该框架传递所有JSON即可。我看不出将函数添加到一个“扩展”方法/函数与应用.prototype有多大区别。我认为我的方法更适合于分析应用程序的流程、调试。