¿Cómo establecer un prototipo para un object JSON?

Estoy recibiendo un object JSON del server, y quiero "encasillarlo" o "bendecirlo" a un object con methods ya definidos. ¿Hay alguna forma de establecer un prototipo para un object JSON simple?

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(); 

¿Cómo puedo hacer eso?

Bueno, puedo sugerir probar estos:

  • Al agregar las funciones necesarias a TODOS los objects Javascript (mala práctica)

     Object.prototype.lol = function() { alert(this.a); }; var x = {a : 'b'}; x.lol(); 
  • Al "extender" JSON con una function:

     var json = {a : 'b', b : 123}; function extend(obj) { obj.func1 = function(param) { alert(this[param]); } } extend(json); json.func1('b'); 
  • Al "hacer" que el object se convierta en una function:

     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'); 

O puede usar un marco JS para eso. O cualquier otro método que se te ocurra 🙂 Mis ejemplos son fáciles, pueden extenderse a cualquier cosa sofisticada que necesites.

DE ACUERDO. Aquí está la respuesta (que es IE-incompatible):

 json.__proto__ = MyClass.prototype; 

Afortunadamente, no necesito ningún% $ @ $% # IE en mi aplicación.

(Cuando lo hago, hay otra posibilidad: crear una function de envoltura en el prototipo de MyClass que copie todas las properties de JSON al nuevo object; la copy poco profunda debería ser suficiente).