当我第一次开始编写自己的代码时,我永远不会理解jQuery的'增强'init构造函数,直到后来才开始构建我的对象。我想知道我是应该保留旧方法还是开始使用我自己的'增强'init构造函数。
我的构造函数:
var $ = function(selector,context,createObj) {
if(createObj) {
// actually initiating object
} else {
return new $(selector,context,true);
}
};
jQuery的:
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
};
实际初始值:
init: function( selector, context, rootjQuery ) {
// some code
}
更改原型(jQuery.prototype.init.prototype = jQuery.prototype):
jQuery.fn.init.prototype = jQuery.fn;
答案 0 :(得分:2)
jQuery's constructor pattern是历史上的成长和不良做法 - 或者至少是不必要的复杂。如果您想要一个在没有new
的情况下运行良好的构造函数(如果应用错误),请使用
function $(selector, context) {
if (this instanceof $) {
// actually initiating object
} else {
return new $(selector, context);
}
}