jQuery.fn.init.prototype = jQuery.fn;这样写好绕
jQuery.fn 为一个对象的话 对象的其中一个方法的原型 是对象自己 而且new jQuery对象为什么非要套在 jQuery.prototype里面其中的一个方法init上来做构造,用个其他的函数是不是更清晰些 ?
function F(selector, context, rootjQuery){
return this;
}
F.prototype={
each:function(){
},
....
}
};
var jQuery = function( selector, context ) {
// return new jQuery.fn.init( selector, context, rootjQuery );
return new F( selector, context, rootjQuery );
}
这样是不是更清晰一些?
7 回复
(1) $.fn 提供扩展插件 (2)namespace
F需要一个命名空间来放置,如果你放到windows上,则有命名冲突风险。 最后你不得不jQuery.prototype.F = function () {} jQuery.F 不会成功,因为jQuery这时候还没有建立起来. 很明显init比F更有说明性.
jQuery.fn 就是 jQuery.prototype
如果不考虑扩展插件,上面的代码是不是就够用了?
F就放在闭包里面,内部使用,对外只提供window.jQuery jQuery和F指向同一个原型就行了 jQury没有建立起来,但是F建立了,用F来做构建工作, 做完了,再让jQuery与F相同就行了,对外使用和扩展统一用jQuery
var rootjQuery;
// 构建jQuery对象
function F(selector, context, rootjQuery){
console.log('F');
return this;
}
F.prototype={
constructor: jQuery,
say:function(){
console.log('hello');
}
};
var jQuery = function( selector, context ) {
console.log('jQ');
// return new jQuery.fn.init( selector, context, rootjQuery );
return new F( selector, context, rootjQuery );
}
jQuery.prototype= F.prototype;
var a =jQuery('#ss');
console.log(a);
a.say();
jQuery.prototype.addbox=function(){
console.log("add box ");
}
a.addbox();
框架和类库设计思考的区别
@yakczh 和我碰到的问题一样啊,不知道你有思考出来为什么吗?在线等