🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
3 messages
3 total messages Started by CT Thu, 15 Mar 2012 11:23
Dodawanie nowej metody do istniejącego obiektu
#51043
Author: CT
Date: Thu, 15 Mar 2012 11:23
15 lines
2198 bytes
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.

Niemniej jednak addMethod nie działa mi w < IE8. Ma ktoś pomysł co mogę z tym zrobić?

-- 
Pozdrawiam,
CT
Re: Dodawanie nowej metody do istniejącego obiektu
#51044
Author: Herr
Date: Wed, 21 Mar 2012 22:23
49 lines
2757 bytes
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
Re: Dodawanie nowej metody do istniejącego obiektu
#51045
Author: Cezary Tomczyk
Date: Mon, 26 Mar 2012 22:09
63 lines
3353 bytes
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/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads