我想按照一些有趣的jQuery模式(基本上是Builder和Prototype)来开发一个库。我试图阅读jQuery源并搜索教程,但没有得到任何帮助。
我的想法是允许这种类型的访问:grace(...)
可直接调用grace.set(...)
可以有方法grace.fn.get = ...
可以设置新方法
The most I got was this:
(function(window, undefined) {
"use strict";
//
var grace = function(options) {
return new grace.fn.init(options);
};
//
grace.fn = grace.prototype = {
//
set: function() {
alert("grace.set() OK");
},
//
init: function() {
alert("grace() OK");
},
};
//
window.grace = grace;
})(window);
它可以直接调用,但无法访问其方法。
最佳答案
应该将extend
方法添加到grace
和grance.fn
,并且当您要将新方法添加到grace
时,请使用grace.extend
;当您要将新方法添加到grace()
创建的实例时,请使用grace.fn.extend
。看下面的代码:
(function(window, undefined) {
"use strict";
var grace = function(options) {
return new grace.fn.init(options);
};
grace.fn = grace.prototype = {
init: function() {
alert("grace() OK");
},
};
grace.extend = grace.fn.extend = function() {/* code here */}
grace.extend({ // add new methods to grace itself
set: function() {
alert("grace.set() OK");
}
})
grace.fn.extend({
/* add new methods to instances that grace() creates */
})
grace.fn.init.prototype = grance.fn;
window.grace = grace;
})(window);
注意:需要
grace.fn.init.prototype = grance.fn
,因为new grace.fn.init(options)
将使对象继承grace.init.prototype
的方法。没有那行代码,您将不会获得这些grace.fn
方法。对不起,我的英语不好,也很抱歉没有可运行的代码。希望上面的代码会启发您。