我正在尝试像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()方法不存在。我仍然希望保持对其他方法使用括号的能力,所以我只想要它是可选的。谢谢!
答案 0 :(得分:3)
变化:
window.fooTools = window.$foo = fooTools;
为:
window.$foo = new fooTools();
window.fooTools = fooTools;
修改
window.fooTools = fooTools;
window.$foo= fooTools;
window.$foo.get = fooTools.prototype.get;
答案 1 :(得分:2)
定义两种不同类型的方法,就像我们在jQuery中一样。
如果方法需要括号,例如$foo('id1').attr({...})
使用$foo.prototype.method = function
定义,则将其定义为$foo
$foo.get = function(){...}
的属性
编辑:这实际上是基于IAbstract的答案。
fooTools.prototype
不是$foo.prototype
,因为fooTools
是$foo
是其实例的类。
答案 2 :(得分:1)
然后你需要将$foo
定义为函数以外的东西 - 现在你正在返回fooTools
这是一个函数,所以你需要调用它才能访问它暴露。
(Drat,他打败了我。)