🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Dodawanie nowej metody do istniejącego obiektu

#51044
From: 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
Technical Details
Message-ID: <jkdkdm$5n8$1@node2.news.atman.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
References: <20065128.446.1331810614267.JavaMail.geo-discussion-forums@ynbo9>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
From: Herr <somepoorfella@someserver.out.there>
Newsgroups: pl.comp.lang.javascript
Subject: Re: Dodawanie nowej metody do istniejącego obiektu
Date: Wed, 21 Mar 2012 23:23:53 +0100
Organization: Megadeath, Inc.
Lines: 49
Message-ID: <jkdkdm$5n8$1@node2.news.atman.pl>
References: <20065128.446.1331810614267.JavaMail.geo-discussion-forums@ynbo9>
NNTP-Posting-Host: 89-75-143-232.dynamic.chello.pl
Mime-Version: 1.0
X-Trace: node2.news.atman.pl 1332368631 5864 89.75.143.232 (21 Mar 2012 22:23:51 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Wed, 21 Mar 2012 22:23:51 +0000 (UTC)
User-Agent: Noworyta News Reader/2.9
X-Antivirus: avast! (VPS 120321-0, 2012-03-21), Outbound message
X-Antivirus-Status: Clean
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit