我正在构建一个包装器中的原型辅助方法集合。但是为了便于使用,我希望能够在同一个调用下将对象称为新实例和单个全局实例。
例如,使用jQuery,您可以调用“$”和“$()”,它们的使用方式可以不同http://learn.jquery.com/using-jquery-core/dollar-object-vs-function/:
所以鉴于这个简单的例子,我怎么能做类似的事情?
(function () {
var myWrapper = function (foo) {
return new helper(foo);
};
var helper = function (foo) {
this[0] = foo;
return this;
}
helper.prototype = {
putVar: function(foo) {
this[0] = foo;
}
}
if(!window.$) {
window.$ = myWrapper;
}
})();
// create an new instace;
var instance = $("bar");
console.log(instance);
// call a prototype method
instance.putVar("foo");
console.log(instance);
// call a prototype method using the same call without new instance
// this doesnt work :(
$.putVar("foo");
// however this will work
window.myLib = $("foo");
myLib.putVar("bar");
答案 0 :(得分:0)
如果您想致电$.putVar
,则应定义putVar
,如下所示:
myWrapper.putVar = function (foo) {
console.log('Work');
}
在您的代码中,instance
和myLib
是相同的,它们都是由您创建的实例。
如果您要同时拨打$.putVar
和$(...).putVar
,则应添加我在上面显示的代码。这意味着您必须定义两个putVar
函数,一个像'实例'方法一样使用,而另一个像'静态'方法一样使用。
如果您搜索jQuery源代码,您将看到定义了两个each
函数。这就是为什么你可以同时$.each(...)
和$(...).each
用于不同的用途。