Open huandie2012 opened 6 years ago
window.jQuery = window.$ = jQuery;
var jQuery = function (){ return new jQuery();//每次调用jQuery()返回一个jQuery的实例对象 } jQuery.prototype = { //在这里定义方法 };
但是这样做的问题是出现死循环。 最简单的解决办法是借助另一个构造函数:
var init = function (){};//创建init作为构造函数 init.prototype = { //属性和方法写在init的原型对象中 } var jQuery = function (){ return new init;//每次调用jQuery()返回一个init的实例 }
但是jQuery的作者并没有这么做,可能是出于某种技术洁癖或者其他原因,init被定义在了jQuery函数的原型中,源码如下:(首先jQuery原型将用fn来代替,这样可以少些一些字母,其次为了防止产生上述问题,这里借用了一个init函数)
//构建jQuery对象 var jQuery = (function (){ var jQuery = function (selector, context){ return new jQuery.fn.init(selector, context, rootjQuery); } }) //jQuery对象原型 jQuery.fn = jQuery.prototype = { constructor: jQuery, init: function (selector, context, rootjQuery){ //something to do } }; jQuery.fn.init.prototype = jQuery.fn;
通过init作为中转站,最终return出一个jQuery实例。 题外话: 这里强调一下构造函数: 当函数调用表达式前出现了关键字new,这个函数就成了构造函数,此时会依次发生四件事:
从以下几个点来说明:
但是这样做的问题是出现死循环。 最简单的解决办法是借助另一个构造函数:
但是jQuery的作者并没有这么做,可能是出于某种技术洁癖或者其他原因,init被定义在了jQuery函数的原型中,源码如下:(首先jQuery原型将用fn来代替,这样可以少些一些字母,其次为了防止产生上述问题,这里借用了一个init函数)
通过init作为中转站,最终return出一个jQuery实例。 题外话: 这里强调一下构造函数: 当函数调用表达式前出现了关键字new,这个函数就成了构造函数,此时会依次发生四件事: