2010-12-10 7 views
6

Tengo algunos objetos deserializados de JSON a los que me gustaría asignar un nuevo prototipo para proporcionar diversas funciones getter y setter. La manera obvia de hacer esto (como se menciona en this question) es establecerManera correcta de asignar a la propiedad __proto__

myJsonObj.__proto__ = { function1: /* ... */, function2: /* ... */ }; 

Sin embargo, como MDC helpfully points out, la propiedad __proto__ no es estándar y en desuso. ¿Hay alguna forma compatible con los estándares (para alguna definición de "estándares") para lograr el mismo efecto, sin tener que crear muchos objetos envoltorios nuevos?

+0

La documentación se ha vinculado a sugiere que "El uso Object.getPrototypeOf() en su lugar" ([getPrototypeOf()] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf)). Entonces algo como esto: 'var proto = myJsonObj.getPrototypeOf(); proto.function1 =/* lo que sea * /; proto.function2 =/* lo que sea * /; ' – Lee

+0

Lee, si no me equivoco, llamar a' Object.getPrototypeOf (myJsonObj) 'me daría' Object.prototype' (ya que 'myJsonObj' no tenía ningún otro constructor) Eso significa que siguiendo su sugerencia, estaría modificando 'Object' (muy mal) en lugar de inyectar una clase en' myJsonObj'. – kpozin

Respuesta

4

No existe una forma que cumpla con los estándares para cambiar el prototipo de un objeto después de su creación. Existe una forma compatible con los estándares para crear objetos con cualquier prototipo que desee al analizar desde JSON.

De http://www.json.org/js.html:

El parámetro opcional resucitador es una función que será llamado para cada clave y el valor en todos los niveles del resultado final . Cada valor será reemplazado por el resultado de la función reviver . Esto se puede usar para reformar objetos genéricos en instancias de pseudoclases , o para transformar cadenas de fecha en objetos de fecha.

Cuestiones relacionadas