2010-12-10 20 views
6

Mam kilka obiektów deserialized z JSON, do których chciałbym przypisać nowy prototyp w celu zapewnienia różnych funkcji getter i setter. Oczywistym sposobem, aby to zrobić (jak wspomniano w this question) jest ustawionyPrawidłowy sposób przypisywania do właściwości __proto__

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

Jednakże, jak MDC helpfully points out właściwość __proto__ jest nietypowy i przestarzałe. Czy istnieje jakiś zgodny z normami sposób (dla jakiejś definicji "standardów"), aby osiągnąć ten sam efekt, bez konieczności tworzenia wielu nowych obiektów opakowania?

+0

Dokumentacja jesteś związana sugeruje "Use Object.getPrototypeOf() zamiast" ([getPrototypeOf()] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf)). A więc coś takiego: 'var proto = myJsonObj.getPrototypeOf(); proto.function1 =/* niezależnie * /; proto.function2 =/* any * /; ' – Lee

+0

Lee, jeśli się nie mylę, wywołanie' Object.getPrototypeOf (myJsonObj) 'dałoby mi' Object.prototype' (ponieważ 'myJsonObj' nie miałoby żadnego innego konstruktora). Oznacza to, że podążając za twoją sugestią, modyfikowałbym 'Object' (bardzo zły) zamiast wstrzykiwania klasy do' myJsonObj'. – kpozin

Odpowiedz

4

Nie istnieje żaden zgodny ze standardami sposób zmiany prototypu obiektu po jego utworzeniu. Istnieje zgodny z normami sposób tworzenia obiektów o dowolnym prototypie, który jest pożądany podczas analizowania z JSON.

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

Opcjonalny parametr odnowiciel jest funkcja, która zostanie wywołana dla każdego klucza i wartości na każdym poziomie wyniku końcowego . Każda wartość będzie zastąpiona przez funkcję rewitalizatora . Można go użyć do przekształcenia ogólnych obiektów w instancje pseudoklasy lub do przekształcenia ciągów daty w obiekty Date.

Powiązane problemy