$.extend() 和 $.fn.extend() 以及prototype属性
先介绍 $.extend()
$.extend() : 用一个或多个其他对象来扩展一个对象,返回扩展后的对象。
参数:[true/false] ,target,obj1..objN
第一个参数:默认false 可不写;如过为true,则表示递归合并,即对象里面的同名对象也会合并;
第二个参数: 被扩展的对象,会变的和放回结果一样;如果参数只要一个对象,则这个对象被省略,即不指定target;
第三个参数:待合并到第一个对象的对象,可以多个;
示例:
var empty = {}; var defaults = { validate: false, limit: 5, name: "foo" }; var options = { validate: true, name: "bar" }; var settings = jQuery.extend(empty, defaults, options); //--结果-------------------------------- settings == { validate: true, limit: 5, name: "bar" } empty == { validate: true, limit: 5, name: "bar" }
到此$.extend()方法基本了解了!
但是,在不指定target时候,则给jQuery命名空间本身进行扩展。这有助于插件作者为jQuery增加新方法。
这样在对jQuery进行扩展的时候,我们就需要区分$.extend()和$.fn.extend()扩展的不同了
$.extend()是对"$"这个对象本身进行扩展
$.fn.extend()是对"$.fn"这个对象本身进行扩展
那么多出的fn代表什么呢?
原来jQuery.fn = jQuery.prototype ;
prototype是什么?
我的理解:prototype是被实例的对象的代表,也就是说,作用相当于this;是this的外在体现。
示例说明:
var funT = function(){ this.attr = "Prototype attr"; //this 代表当前对象 也作用同 funT.prototype }//funT既是对象也是方法; var t1 = new funT();//方法实例的对象 并查看 实例对象t1 和 方法对象funT 的属性 console.log("t1.name :"+t1.name); console.log("t1.attr1 :"+t1.attr); console.log("funT.name :"+funT.name);//name 是function的默认属性 console.log("funT.attr :"+funT.attr); console.log("-------Add funT.prototype.demo --------------"); funT.prototype.demo = "Prototype demo" //添加实例对象属性 prototype 作用同 this console.log("t1.demo :"+t1.demo); console.log("funT.demo :"+funT.demo); console.log("-------Add funT.attr --------------"); funT.attr = "funT attr"; //添加方法对象本身属性 console.log("t1.attr :"+t1.attr); console.log("funT.attr :"+funT.attr);
----------输出的结果---------------------------------------------------
t1.name :undefined
t1.attr1 :Prototype attr
funT.name :funT
funT.attr :undefined
-------Add funT.prototype.demo --------------
t1.demo :Prototype demo //有效
funT.demo :undefined //无效
-------Add funT.attr --------------
t1.attr :Prototype attr //依旧是prototype的属性
funT.attr :funT attr //有效了
由于js的方法也是对象,所以funT是方法的同时也是对象。prototype 是在funT是方法时候使用的,作用是给实例对象添加属性或方法;
同理可以推出
$.extend() 是在$作为对象时候使用,是为$这个对象本身添加扩展用的。
$.fn.extend()是在$作为方法时候使用,为了$()实例的对象添加扩展用的。
以上就是我的理解!

浙公网安备 33010602011771号