CT wrote:
> Chcę rozszerzać istniejący obiekt prototype o nowe metody. Utworzyłem do
> tego wstępny kod, który jest tutaj:
>
>
http://jsfiddle.net/u9e7R/9/
>
> Problem jednak w tym, że addMethod (bazowałem na
>
http://ejohn.org/blog/javascript-method-overloading/) poprawnie dodaje
> mi nową metodę do obiektu prototype, ale już np. w IE 8,7 nie działa mi
> poprawnie.
>
> W konsekwencji wywołanie jsCode().test2().test(); powoduje błąd, gdzie
> IE 8,7 stwierdza, że "Obiekt nie obsługuje właściwości lub metody
> "test2"". Czyli pod IE8 metoda test2 nie została dodana do obiektu
> prototype.
>
> Jeżeli chodzi o znalezienie samego obiektu prototype to "return
> object.constructor.prototype;" w IE8 działa. A przynajmniej tak mi się
> wydaje, że działa poprawnie.
no tak. Ale czy w wyniku działania dostajesz to, co dostać chciałeś?
http://stackoverflow.com/questions/8024879/is-object-getprototypeof-same-as-object-constructor-prototype-in-javascript
Wygląda mi na to że niepotrzebnie nadpisujesz konstruktor dla jsCode:
https://gist.github.com/1664895
> Niemniej jednak addMethod nie działa mi w < IE8. Ma ktoś pomysł co mogę z tym zrobić?
Testowane w IE9 przestawionym w tryb IE8, więc być może niecnie Cię
okłamuję i tak naprawdę w prawdziwym IE8 wcale nie zadziała...
niemniej u mnie pomogło:
1) usunięcie przypisania constructor: jsCode z jsCode.init.prototype
(cała linijka won)
2) zmiana sposobu pobierania prototypu obiektu w metodzie addMethod
(definujesz sobie metodę getPrototypeObject a potem z niej nie
korzystasz...):
zamień
var object = Object.getPrototypeOf(this);
na
var object = this.getPrototypeObject (this);
--
Herr C(...)a
mój e-mail?
http://cerbermail.com/?YWDqT8olYO