宝哥软件园

通过jQuery源代码学习javascript)

编辑:宝哥软件园 来源:互联网 时间:2021-10-06

巧妙1:函数是javascript代码中不可多得的天赋。它可以放置代码段并封装相对独立的函数。它还可以实现类并注入OOP思想。JQuery是一个函数,你也可以把它当成一个类(呵呵,它本身就是一个类)。复制代码如下:(function(){ var jquery=function(){//function body } window . jquery=window。$=jQuery})();console . log(jQuery);

上述空函数称为构造函数,是面向对象语言中类的基本方法。聪明二:什么是扩展原型对象?我给你一个博文,你可以找到//www . JB 51 . net/article/32857 . htm . JavaScript把一个原型属性绑定到所有函数,这个属性指向一个原型对象。我们在原型对象中定义类的继承属性和方法。原型是javascript继承的基本机制。复制的代码如下:(function(){ var jquery=function(){//函数体} jquery . fn=jquery . prototype={//扩展原型对象jquery:' 1.8.3 ',test : function(){ console . log(' test ')。} } window.jQuery=window。$=jQuery})();(新的jQuery())。test();巧妙:用factory方法创建实例,上面的方法必须用下面的方法调用,会产生很多对象,浪费内存消耗。(新的jQuery())。test();JQuery源代码使用了一个非常软的方法,这也是大家熟悉的工厂调用方法。复制的代码如下:(function(){ var jquery=function(){//函数体返回jquery . fn . init();} jquery . fn=jquery . prototype={//扩展原型对象jquery:' 1.8.3 ',init 3360 function(){ return this;},test : function(){ console . log(' test ');} } window.jQuery=window。$=jQuery})();jQuery()。test();

场景1:让jQuery函数体直接返回对象——。我用这个复制代码如下:(function(){ var jquery=function(){ return this;} jquery . fn=jquery . prototype={//扩展原型对象jquery:' 1.8.3 ',test : function(){ console . log(' test ');} } window.jQuery=window。$=jQuery})();console . log(jQuery());产出

发现这里指向窗口对象。场景2:让jQuery函数体直接返回类的一个实例。复制的代码如下:(function(){ var jquery=function(){ return new jquery();} jquery . fn=jquery . prototype={//扩展原型对象jquery:' 1.8.3 ',test : function(){ console . log(' test ');} } window.jQuery=window。$=jQuery})();console . log(jQuery());产出

发现上面是递归无限循环,存在内存溢出。聪明4:考虑分离范围1:这个由1:init()方法返回的范围是什么?复制的代码如下:(function(){ var jquery=function(){//函数体返回jquery . fn . init();} jquery . fn=jquery . prototype={//扩展原型对象jquery:' 1.8.3 ',init3360function () {this。init _ jquery=' 2.0归还这个;} } window.jQuery=window。$=jQuery})();console.log(jQuery()。jquery);console.log(jQuery()。init _ jquery);产出

init()方法中的scope this:这个关键字指的是init()函数作用域所在的对象,也可以访问上层对象jQuery.fn 3354的函数,这种想法会破坏作用域的独立性,很可能会对jQuery框架产生负面影响。思考2:如何将init()中的这个和jQuery.fn对象分开?3354实例化初始化类型。复制的代码如下:(function(){ var jquery=function(){//function body返回new jquery . fn . init();} jquery . fn=jquery . prototype={//扩展原型对象jquery:' 1.8.3 ',init3360function () {this。init _ jquery=' 2.0归还这个;} } window.jQuery=window。$=jQuery})();console.log(jQuery()。jquery);console.log(jQuery()。init _ jquery);产出

通过实例化init()初始化类型,这在init()方法中是有限制的,它只在init()函数中是活动的,不允许超出范围。灵动5:原型转移思维1:在灵动4中,我们将init()中的这个与jquery.fn对象分开。那么如何保证jQuery原型对象能够在“Clever 4”的基础上被访问呢?3354原型转移。让jQuery的原型对象覆盖init()构造函数的原型对象。复制的代码如下: jquery . fn . init . prototype=jquery . fn;总代码:复制的代码如下:(function(){ var jquery=function(){//function body返回new jquery . fn . init();} jquery . fn=jquery . prototype={//扩展原型对象jquery:' 1.8.3 ',init3360function () {this。init _ jquery=' 2.0归还这个;} } jquery . fn . init . prototype=jquery . fn;window.jQuery=window。$=jQuery})();console.log(jQuery()。jquery);console.log(jQuery()。init _ jquery);产出

奇妙棋将init()对象的原型指针指向jQuery.fn这样,init()中的这个就继承了jQuery.fn原型对象定义的方法和属性。总结一下博主们对我的评价,尤其是普妮,她给我介绍了一本好书。如果你能补充点什么,那就太好了。

更多资讯
游戏推荐
更多+