Article View: pl.comp.lang.javascript
Article #51045Re: Dodawanie nowej metody do istniejącego obiektu
From: Cezary Tomczyk
Date: Mon, 26 Mar 2012 22:09
Date: Mon, 26 Mar 2012 22:09
63 lines
3353 bytes
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-mailReferences:
<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