每日学习心得:$.extend()方法和(function($){...})(jQuery)详解

1.    JS中substring与substr的区别

以前在项目中用到substring方法,由于C#中也有字符串的截取方法Substring方法,当时也没有多想就误觉得这两种方法的使用时同样的。这样就直接按照在C#中使用Substring的方式,直接在js中用了substring,在实际的项目中,有时候能获得正确的结果,可是有时候获得的结果却让人匪夷所思,后来仔细的调试跟踪以后才发现,原来是Js中substring的方法跟C#中的Substring方法不同。关于C# 中的字符串截取方法已经很简单了,这里就再也不叙述了。主要讲一个js中的substring方法,顺便再讲一下substr方法。函数

Substring:插件

该方法能够有一个参数也能够有两个参数。调试

l  一个参数:对象

示例: var str=“Olive”;ci

               str.substring(3);开发

        结果:“ve”字符串

        说明:当substring只有一个参数时,参数表示从字符串的第几位开始截取,原型

直截取到字符串结尾。string

l  两个参数:it

        示例:var str=“Olive”;

1)       Str.substring(3,4);

2)       Str.substring(3,2);

           结果:1) “v”  2) 0

           说明:当substring有两个参数时,第一个参数表示从字符串的第几位开始截取,第二个参数表示截取到字符串的第几位。这点是个C#中字符截取不一样的一点,因此才会致使不一样的结果。

Substr:

该方法也能够有一个或两个参数。

l  一个参数:

    说明:substr一个参数时,做用跟substring方法一个参数时同样。

l  两个参数:

    示例:var str=“Olive”;

1)       Str.substr(3,2);

2)       Str.substr(3,4);

        结果:1) “ve” 2) “ve”

        说明:substr有两个参数时,第一个参数表示从字符串的第几位开始截取,第二个参数表示截取多少位字符串。这点跟C#中字符截取相同的,因此在之后的使用中,若是想要避免出现截取的问题最好仍是使用substr。

2 $.extend()

由于项目中有些地方看到有用到这个方法,当时也不知道是什么意思,见的多了就想了

解一下。原来这个方法仍是挺有用的,多用在编写插件,固然,它自己也有一些重载原型。

2.1 extend(result,item1,item2…..)

这里这个方法主要用来合并,将全部的参数项都合并result中,并返回result,可是这

样就会破坏result的结构。

2.2 extend({},item1,item2,……)

用这个方法,能够将所得的结果所有合并在{}中,并返回,并且还不会破坏原有的项的结构。

示例:

Var item={name:”olive”,age:23};

Var item1={name:”Momo”,sex:”gril”};

Var result=$.extend({},item,item1);

结果:

Result={name:”Momo”,age:23,sex:”gril”};

说明:

以上的结果代表extend方法将全部的项都合并到了{}中,可是,细心一点就会发现,其中item1中的name:“Momo” 将item中的name:“olive”给覆盖了,这是怎么回事?请接着往下看。

2.3 extend(bool,{},item1,item2….)

Extend方法还有带bool型参数的重载。

bool型参数为true表示深拷贝,为false时表示浅拷贝。具体能够经过一下示例来讲明:

示例:

var item={name:“olive”,age:23,address{provice:”河南”,city:”郑州”}};

var item1={sex:”girl”,address{city:”北京”}};

var result=$.extend(true,item,item1);

var result1=$.extend(false,item,item1);

结果:

Result={name:“olive”,age:23,sex:”gril”,address:{provice:”河南”,city:”北京”}};

Result1={name:“olive”,age:23,sex:”gril”,address:{ city:”北京”}};

说明:

以上结果说明,当参数为ture时,即为深拷贝,当子项item1中的子项有与item中的子项相同属性的值不同时,item1中子项的值会将item子项中的值给覆盖,当子项item1的属性跟item中的属性不一样时,会与item进行合并。

当参数为false时,子项item1中的子项中与item中的子项属性相同时,item1中子项的属性值会将item中的值给彻底覆盖。

2.4 $.extend(item)

该方法是将item合并到Jquery的全局对象中去,至关于为Jquery全局对象添加了一个

静态方法(对应这里的静态方法,固然还有实例方法,在后边有介绍)。

     示例:

           $.extend({SayHello:function(value){alert(“hello “+value);}});

           这样写过以后,就能够直接调用SayHello方法:

           $.SayHello(“Olive”);

     说明:该方法至关于为Jquery类添加了新的方法。

2.5 $.fn.extend(item)

上边提到的$.extend(item)说是为Jquery类添加了静态方法,那么这里的$.fn.extend(item

)就是为每个实例添加一个实例方法了。

     示例:

         $.fn.extend({hello:function(value){alert(“hello “+value);}});

         这样写过以后,在获取每个示例以后,均可以调用该方法:

         $(“#id”).hello(“Olive”);

 

3.(function($){….})(jQuery)

初次看到这种写法时,一头雾水,不知所云。在网上查找了一些资料以后才有点明白。

咱们先看第一个括号里边的内容:function($){….},这不就是一个匿名的函数吗?可是它的形参比较奇怪,是$,这里主要是为了避免与其它的库冲突。

这样咱们就比较容易理解第一个括号内的内容就是定义了一个匿名函数,咱们在调用函数的时候,都是函数名后边加上括号以及实参,可是因为操做符的优先级咱们定义的匿名函数也须要用()括起来。

如今我想你们已经很清楚这句话是什么意思了吧。第一个括号表示定义了一个匿名函数,而后第二个函数表示为该函数传递的参数,整个结合起来意思就是,定义了一个匿名函数,而后又调用该函数,该函数的实参为jQuery。

至关于:function fun($){…};fun(jQuery);

这种方法多用于存放开发的插件,执行其中的代码时,Dom对象并不必定加载完毕。于此相反的是$(function(){}),这种方法在使用时页面的Dom对象已经加载完毕了。事实上该方法的全写是:$(document).ready(function(){});

 

好了,今天就总结到这里了,主要都是一些跟写插件相关的经常使用的方法,但愿能给你们一些帮助。

相关文章
相关标签/搜索