Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Dodawanie nowej metody do istniejącego obiektu

21 views
Skip to first unread message

Herr

unread,
Mar 21, 2012, 6:23:53 PM3/21/12
to
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

Cezary Tomczyk

unread,
Mar 26, 2012, 6:09:42 PM3/26/12
to
W dniu 2012-03-21 23:23, Herr pisze:
> 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

Dokładnie tak. Konstruktor był niepotrzebnie nadpisywany.

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

Tak też zrobiłem.

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

Ogólnie to już nieco pozmieniałem kod i zmiany wrzuciłem na publiczne repo:

https://github.com/ctomczyk/jsCode/blob/master/src/jscode.js

Ot, pozbieram co tam mam w jedną całość :-)

BTW Nie wiem, jakiego rozwiązania użyć, by w pliku jakaś zmienna była
zamieniana automatycznie na aktualny numer rewizji projektu podczas
każdego commita. Używam Git-a, rzecz jasna. Może ktoś ma pomysł?

--
Cezary Tomczyk
http://www.ctomczyk.pl/
0 new messages