不带括号的Javascript调用类(jQuery样式)
我试图建立类似jQuery的库,只是为了学习。我让它工作得很好,我可以根据需要进行方法链接。我遇到的问题是能够使用类的括号调用方法: 我要做的是:不带括号的Javascript调用类(jQuery样式),javascript,jquery,class,Javascript,Jquery,Class,我试图建立类似jQuery的库,只是为了学习。我让它工作得很好,我可以根据需要进行方法链接。我遇到的问题是能够使用类的括号调用方法: 我要做的是: $foo().get('id1'); 我想做的是: $foo.get('id1'); 以下是当前的javascript: (function( window ) { var document = window.document; var fooTools = (function() { var fooTools =
$foo().get('id1');
我想做的是:
$foo.get('id1');
以下是当前的javascript:
(function( window ) {
var document = window.document;
var fooTools = (function() {
var fooTools = function( selector ) {
return new fooTools.base.init( selector );
};
fooTools.base = fooTools.prototype = {
init: function( selector ) {
if( !selector ) {
return this;
}
if( selector ) {
this[0] = selector;
this.length = 1;
return this;
}
},
get: function( id ) {
return document.getElementById( id );
},
//..other methods
};
fooTools.base.init.prototype = fooTools.base;
return fooTools;
}());
window.fooTools = window.$foo = fooTools;
}( window ));
目前它工作正常,但如果不包含括号,则会出现一个错误,即.get()方法不存在。我仍然希望保持对其他方法使用括号的能力,所以我只希望它是可选的。谢谢 变化:
window.fooTools = window.$foo = fooTools;
致:
编辑 更改:
window.fooTools = window.$foo = fooTools;
致:
编辑
然后您需要将
$foo
定义为函数以外的东西——现在您返回的是fooTools
,这是一个函数,因此您需要调用它才能访问它公开的内容
(德拉特,他比我快了。)然后你需要定义
$foo
为函数以外的东西——现在你要返回fooTools
,这是一个函数,所以你需要调用它来访问它所公开的内容
(德拉特,他比我快。)定义两种不同的方法,就像我们在jQuery中所做的那样 如果该方法需要括号,例如
$foo('id1').attr({…})
使用$foo.prototype.method=function
定义它,否则,将其定义为$foo
$foo.get=function(){…}
编辑:这实际上是基于IAbstract的答案
这将是
fooTools.prototype
而不是$foo.prototype
,因为fooTools
是$foo
的一个实例类。定义两种不同的方法,就像我们在jQuery中所做的那样
如果该方法需要括号,例如$foo('id1').attr({…})
使用$foo.prototype.method=function
定义它,否则,将其定义为$foo
$foo.get=function(){…}
编辑:这实际上是基于IAbstract的答案
这将是
fooTools.prototype
而不是$foo.prototype
,因为fooTools
是$foo
的一个实例。这剥夺了我在需要时用括号括起来的能力,比如$foo('id1')。attr({…})
@headpin见凯文的答案;这样你就可以同时做到这两个。这难道不是意味着我必须指定我想要的每个方法,以便能够像这样调用w/o括号吗?看来jQuery的工作方式更优雅一些。你知道怎么做吗?我正在看未压缩的版本,无法将我的头缠绕在它周围。他们正在做一些类似于jQuery.extend=jQuery.fn.extend=function(){}
的事情,但我没有运气jQuery.fn实际上只是jQuery.prototype,所以本质上它与这种方法非常相似,这会剥夺我在需要时使用括号的能力,比如$foo('id1').attr({…})
@headpin见凯文的答案;这样你就可以同时做到这两个。这难道不是意味着我必须指定我想要的每个方法,以便能够像这样调用w/o括号吗?看来jQuery的工作方式更优雅一些。你知道怎么做吗?我正在看未压缩的版本,无法将我的头缠绕在它周围。他们正在做类似于jQuery.extend=jQuery.fn.extend=function(){}
的事情,但我没有运气jQuery.fn实际上只是jQuery.prototype,所以本质上它与这种方法非常相似
window.fooTools = fooTools;
window.$foo= fooTools;
window.$foo.get = fooTools.prototype.get;