10 messages in com.googlegroups.jquery-dev[jquery-dev] Re: Subclassing jQuery
FromSent OnAttachments
Nate CavanaughNov 11, 2008 3:37 pm 
John ResigNov 12, 2008 6:36 am 
Nate CavanaughNov 12, 2008 11:08 am 
John ResigNov 12, 2008 11:16 am 
Nate CavanaughNov 12, 2008 11:29 am 
John ResigNov 12, 2008 11:51 am 
Nate CavanaughNov 12, 2008 12:46 pm 
John ResigNov 12, 2008 1:19 pm 
Nate CavanaughNov 13, 2008 11:33 am 
John ResigNov 13, 2008 11:45 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:[jquery-dev] Re: Subclassing jQueryActions...
From:John Resig (jere@gmail.com)
Date:Nov 12, 2008 11:16:50 am
List:com.googlegroups.jquery-dev

Tweaked your example to make that work - it now works for both queries and adding methods: http://dev.jquery.com/~john/plugins/subclass/

You did: subClass.fn.init= subClass.prototype;

Which should've been: subClass.fn.init.prototype = subClass.prototype;

--John

On Wed, Nov 12, 2008 at 2:08 PM, Nate Cavanaugh <na@shift22.com> wrote:

Heya John, Thanks for the response, and sorry I wasn't more clear. I've tried so many different variations of this, that I can't remember which did what. That one does keep the chain properly in place, but this doesn't work: subClass('body') // Should error out and say subClass.fn.init is not a constructor. Every way I was able to get the above to work, it would only do so by maintaining the link between subClass.fn and jQuery.fn. Is there any other way you can think of that would essentially (and in a way that's performant) extend a new object off the jQuery object? Thanks again for your guys time :) Nate Cavanaugh Director of User Interface Engineering Liferay, Inc. Enterprise. Open Source. For life.

On Nov 12, 2008, at 6:37 AM, John Resig wrote:

Try as I might I can't reproduce your problem. I created a test page: http://dev.jquery.com/~john/plugins/subclass/

I overwrote the removeClass method and they're both different on each object (subClass vs. jQuery).

Maybe there's another mistake at play?

--John

On Tue, Nov 11, 2008 at 6:37 PM, Nate Cavanaugh <na@shift22.com> wrote:

Hi all,

As promised, here is the second topic I wanted to ask about:

Are there any plans, or is there any current way to subclass the jQuery

object? I've been doing a lot of digging around and I've seen some talks

about it, and there have been some questions about what the use would be,

but I've found a use case, and me, Paul, and Eduardo have all tried to

figure out a way, but to no avail.

Here is the use case:

I want to create a function that behaves exactly like jQuery, except that it

does some slightly different things, and be able to extend it without

worrying about what the parent jQuery object is doing, or what plugins have

been loaded globally.

The benefits are that it would use the prototype chain, so it would be

memory efficient, and it would be a way to add plugins without them being

clobbered by other plugins.

So, I've tried a bunch of stuff:

var subClass = function(sel, context){

return new subClass.fn.init(sel, context);

}

subClass.fn = subClass.prototype = new jQuery.fn.init;

subClass.fn.init = subClass.prototype;

and I've tried so many different variations of this, but anytime I try to

do:

subClass.fn.test = function(){}

it, without fail, creates jQuery.fn.test.

To show what I am trying to do, I'll give an example:

jQuery.fn.plugin1 = function(){

console.log('I am global, everyone can see me');

return this;

} // globally available plugin

subClass.fn.plugin1 = function(){

console.log('I am local, and I am only run when using the subclass');

return this;

} // my own local plugin

so you could do:

jQuery('body').plugin1(); // prints 'I am global, everyone can see me'

subClass('body').plugin1(); // prints 'I am local, and I am only run when

using the subclass'

However, namespaced plugins is only one advantage. Being able to attach

custom static methods, etc, would be incredibly useful.

Does anyone know of a way to subclass the jQuery object using it's

prototype?

Thanks again for reading all of this. I truly appreciate it,

Nate Cavanaugh

Director of User Interface Engineering

Liferay, Inc.

Enterprise. Open Source. For life.

Nate Cavanaugh

Director of User Interface Engineering

Liferay, Inc.

Enterprise. Open Source. For life.