🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.javascript
Article #51045

Re: Dodawanie nowej metody do istniejącego obiektu

#51045
From: 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/
Technical Details
Message-ID: <jkqpf5$9s6$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <20065128.446.1331810614267.JavaMail.geo-discussion-forums@ynbo9> <jkdkdm$5n8$1@node2.news.atman.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: Cezary Tomczyk <ctomczyk.pl@gazeta.pl>
Newsgroups: pl.comp.lang.javascript
Subject: Re: Dodawanie nowej metody do istniejącego obiektu
Date: Tue, 27 Mar 2012 00:09:42 +0200
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 63
Message-ID: <jkqpf5$9s6$1@inews.gazeta.pl>
References: <20065128.446.1331810614267.JavaMail.geo-discussion-forums@ynbo9> <jkdkdm$5n8$1@node2.news.atman.pl>
NNTP-Posting-Host: ip-79-175-205-52.cable.smsnet.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1332799782 10118 79.175.205.52 (26 Mar 2012 22:09:42 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Mon, 26 Mar 2012 22:09:42 +0000 (UTC)
X-User: ctomczyk.pl
In-Reply-To: <jkdkdm$5n8$1@node2.news.atman.pl>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20120312 Thunderbird/11.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit