常见的拷贝方式
常规拷贝
需要注意的是,相同键值对的情况下,作为被合并的对象中的后者会覆盖前者的值,如下所示,被合并的对象有obj1、obj2、obj3,obj2的val2会将obj1的val2覆盖了
var obj1= {
val1: "1" ,val2:"11"};
var obj2 = {
val2: "2" };
var obj3 = {
val3: "3" };
$.extend(obj1, obj2, obj3);
alert(JSON.stringify(obj1)); //{"val1":"1","val2":"2","val3":"3"}
浅拷贝
jq默认为浅拷贝,可以看出浅拷贝后者会将前者的相同key的值覆盖掉。
var result=$.extend({
},{
name:"111",info:{
class:"1",grade:"6"}},{
name:"111",info:{
grade:"4"}});
alert(JSON.stringify(result));//{"name":"111","info":{"grade":"4"}}
深拷贝
可以看出深拷贝会合并相同key对应的value
var result=$.extend(true,{
},{
name:"111",info:{
class:"1",grade:"6"}},{
name:"111",info:{
grade:"4"}});
alert(JSON.stringify(result));//{"name":"111","info":{"class":"1","grade":"4"}}
对指定对象设置静态方法
将静态方法储存的jQuery全局对象中
$.extend({
SayHello: function (value) {
alert(value); } });
$.SayHello("xiaoming");
将方法设置到所有实例中
对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。 比如我们要开发一个插件,做一个特殊的编辑框,当它被点击时,便alert 当前编辑框里的内容。可以这么做:
<button class="btn" id="123">测试按钮</button>
$.fn.extend({
alertWhileClick: function () {
$(this).click(function () {
alert("hello world");
});
}
});
$(".btn").alertWhileClick();