Javascript 调用类不带括号(jQuery 风格)
我正在尝试建立像 jQuery 这样的库,只是为了学习目的。我让它工作得很好,并且我可以根据需要进行方法链接。我遇到的问题是能够使用类的括号调用方法:
我必须做什么:
$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() 方法不存在。我仍然想保持在其他方法中使用括号的能力,所以我只是希望它是可选的。谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
更改:
为:
实时示例
编辑
更新的示例
change:
to:
Live Example
EDIT
Updated Example
定义两种不同类型的方法,就像我们在 jQuery 中所做的那样。
如果方法需要括号,例如
$foo('id1').attr({...})
使用$foo.prototype.method = function
定义它,否则,将其定义为$foo
$foo.get = function(){...}
的属性编辑:这实际上是基于 IAbstract 的答案。
它将是
fooTools.prototype
而不是$foo.prototype
因为fooTools
是$foo
是实例的类的。Define two different kind of methods, just like we do in jQuery.
If the method needs parenthesis such as
$foo('id1').attr({...})
define it using$foo.prototype.method = function
, else, define it as a property of$foo
$foo.get = function(){...}
Edit: This is actually based on IAbstract's answer.
It would be
fooTools.prototype
not$foo.prototype
sincefooTools
is the class that$foo
is an instance of.然后你需要将
$foo
定义为函数以外的东西——现在你返回fooTools
,它是一个函数,所以你需要按顺序调用它访问它公开的内容。(该死,他比我先一步。)
Then you need to define
$foo
as something other than a function--right now you're returningfooTools
, which is a function, so you need to call it in order to access what it exposes.(Drat, he beat me to it.)