Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #12846
| Path | csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail |
|---|---|
| From | cezary.tomczyk@gmail.com |
| Newsgroups | comp.lang.javascript |
| Subject | Re: Adding new method to existing object |
| Date | Sat, 17 Mar 2012 05:17:06 -0700 (PDT) |
| Organization | http://groups.google.com |
| Lines | 98 |
| Message-ID | <23935524.6.1331986626075.JavaMail.geo-discussion-forums@vbla14> (permalink) |
| References | <31786995.22.1331895413978.JavaMail.geo-discussion-forums@vbat19> <fe0320ca-41db-425e-8be2-dcec3878b903@v2g2000vbx.googlegroups.com> |
| NNTP-Posting-Host | 79.175.205.52 |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=UTF-8 |
| Content-Transfer-Encoding | quoted-printable |
| X-Trace | posting.google.com 1331986628 30867 127.0.0.1 (17 Mar 2012 12:17:08 GMT) |
| X-Complaints-To | groups-abuse@google.com |
| NNTP-Posting-Date | Sat, 17 Mar 2012 12:17:08 +0000 (UTC) |
| In-Reply-To | <fe0320ca-41db-425e-8be2-dcec3878b903@v2g2000vbx.googlegroups.com> |
| Complaints-To | groups-abuse@google.com |
| Injection-Info | glegroupsg2000goo.googlegroups.com; posting-host=79.175.205.52; posting-account=fqiM0AoAAACu3aIqzAK2xf9RRpymvKVH |
| User-Agent | G2/1.0 |
| Xref | csiph.com comp.lang.javascript:12846 |
Show key headers only | View raw
W dniu sobota, 17 marca 2012, 04:15:52 UTC+1 użytkownik Scott Sauyet napisał:
> CT wrote:
> > I want to extend my prototype object using another object. Just created some example code:
> >
> > http://jsfiddle.net/u9e7R/13/
> >
> > Can someone explain me how can I extend existing prototype object using new object?
>
> David Mark pointed out the basic flaw in your code, that you munged
> the constructor. I posted a fairly minimal fix to that earlier. (I
> apologize for posting only a link; I know that's poor citizenship on
> USENET. I was in a hurry, but that's no excuse.) But that version is
> to me still fundamentally flawed. It's far too complicated for what
> it does. Below is another version with nearly the same behavior, but
> significantly simpler code.
>
> There are two main differences in behavior: first, there is no factory
> function, just the plain constructor; and second, the addMethod
> function is attached to the constructor, not to the instances. To me
> that simply makes sense, since it is updating the prototype. If you
> meant this to apply to instances, the code would be far more simple.
>
> Here is the simplified code, also available at <http://jsfiddle.net/
> u9e7R/18/>
It's simpler, like I've done this before, but not on the jsFiddle. Next I just wanted to return an instance of an object.
> //~ I just attach this to the global namespace here instead
> //~ of using the `global` variable to reference `this`.
>
> var JsCode = (function() {
> var JsCode = function(params) {
> };
>
> //~ Could use your technique of assigning the prototype,
> //~ but I don't see the point. I just refer to it directly.
> var proto = JsCode.prototype;
>
> proto.test = function() {
> console.log('Function test complete');
> return this;
> };
>
> //~ Since this is added to the prototype, there is no
> //~ need for a function to find the prototype of the object.
> JsCode.addMethod = function (name, fn) {
> var old = proto[name];
>
> proto[name] = function() {
> if ( fn.length == arguments.length ) {
> return fn.apply( this, arguments );
> } else if ( typeof old === "function" ) {
> // really need error checking here.
> return old.apply( this, arguments );
> }
> };
> };
>
> return JsCode;
>
> })();
>
> var test2 = function() {
> console.log('Function test2 complete');
> return this;
> };
>
> JsCode.addMethod('test2', test2);
>
> //~ Without the factory function, you must use `new`.
> var jsc = new JsCode();
> jsc.test2(); //~ or chain these as in the original
> jsc.test();
>
>
> This does change the interface a little, but seems much cleaner. If
> you really want a factory function, you could replace the `return`
> statement above with something like this:
>
> var result = function(params) {
> return new JsCode(params);
> }
> result.addMethod = JsCode.addMethod;
> return result;
>
> (although that could be further simplified if desired.)
>
> Does this capture the essence of what you're trying to do?
Yes! Thank You for clarifying me. This is exactly what I wanted to achieve.
--
Regards,
CT
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Adding new method to existing object cezary.tomczyk@gmail.com - 2012-03-16 03:56 -0700
Re: Adding new method to existing object David Mark <dmark.cinsoft@gmail.com> - 2012-03-16 04:50 -0700
Re: Adding new method to existing object Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-03-16 15:31 +0100
Re: Adding new method to existing object David Mark <dmark.cinsoft@gmail.com> - 2012-03-16 11:51 -0700
Re: Adding new method to existing object Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-03-17 00:10 +0100
Re: Adding new method to existing object David Mark <dmark.cinsoft@gmail.com> - 2012-03-16 17:25 -0700
Re: Adding new method to existing object Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-03-17 02:04 +0100
Re: Adding new method to existing object David Mark <dmark.cinsoft@gmail.com> - 2012-03-16 18:15 -0700
Re: Adding new method to existing object cezary.tomczyk@gmail.com - 2012-03-16 10:18 -0700
Re: Adding new method to existing object David Mark <dmark.cinsoft@gmail.com> - 2012-03-16 11:56 -0700
Re: Adding new method to existing object David Mark <dmark.cinsoft@gmail.com> - 2012-03-16 13:01 -0700
Re: Adding new method to existing object cezary.tomczyk@gmail.com - 2012-03-17 04:58 -0700
Re: Adding new method to existing object David Mark <dmark.cinsoft@gmail.com> - 2012-03-17 16:04 -0700
Re: Adding new method to existing object cezary.tomczyk@gmail.com - 2012-03-18 04:24 -0700
Re: Adding new method to existing object John G Harris <john@nospam.demon.co.uk> - 2012-03-18 13:16 +0000
Re: Adding new method to existing object John G Harris <john@nospam.demon.co.uk> - 2012-03-16 17:09 +0000
Re: Adding new method to existing object cezary.tomczyk@gmail.com - 2012-03-16 10:46 -0700
Re: Adding new method to existing object Scott Sauyet <scott.sauyet@gmail.com> - 2012-03-16 13:43 -0700
Re: Adding new method to existing object Scott Sauyet <scott.sauyet@gmail.com> - 2012-03-16 20:15 -0700
Re: Adding new method to existing object cezary.tomczyk@gmail.com - 2012-03-17 05:17 -0700
Re: Adding new method to existing object cezary.tomczyk@gmail.com - 2012-03-17 05:24 -0700
Re: Adding new method to existing object David Mark <dmark.cinsoft@gmail.com> - 2012-03-17 16:16 -0700
Re: Adding new method to existing object cezary.tomczyk@gmail.com - 2012-03-18 04:27 -0700
csiph-web