jQuery

一、jQuery中的extend()

通常我们使用jQuery的extend时,大都是为了实现默认字段的覆盖,即若传入某个字段的值,则使用传入值,否则使用默认值。

function getOpt(option){
    var _default = {
        name : 'wenzi',
        age : '25',
        sex : 'male'
    }
    $.extend(_default, option);
    return _default;
}
getOpt();  // {name: "wenzi", age: "25", sex: "male"}
getOpt({name:'bing'}); // {name: "bing", age: "25", sex: "male"}
getOpt({name:'bing', age:36, sex:'female'});  // {name: "bing", age: 36, sex: "female"}

extend是将两个或者更多对象的内容合并到第一个对象上,此时第一个对象的原内容发生改变。

对于$.extend(_default,option)来说,_dafault的结构已经发生了改变,并且相同属性的值会被option给替换掉。所以如果不想第一个参数_default的结构发生改变的话,可以这样做:

var res={};
$.extend(res,_default, option);//将_default和option对象上的内容合并到res上,并且_default和option的内容不会发生改变

 

jQuery的extend可以进行深浅拷贝吗 ?

使用extend()默认是浅拷贝

var obj={
    name:'xi',
    score:80
}
var obj1={
    name:'xi',
    score:{
        english:90,
        math1:100
    }
}
$.extend(obj,obj1);
obj.score.english=60;
console.log(obj.score.english);//60
console.log(obj1.score.english);//60

当然$.extend()也提供了深拷贝的方法:$.extend([deep],obj1,obj2),若第一个参数是布尔值,并且值为True,那么就会把第二个参数作为目标参数进行合并。

$.extend(true,obj,obj1);
obj.score.english=60;
console.log(obj.score.english);//60
console.log(obj1.score.english);//90

 

栗子:

var obj={
    name:['a','b']
}
var obj1=$.extend({},obj);//浅拷贝
var obj2=$.extend(true,{},obj);//深拷贝
                
obj.name[0]='aaaa';
console.log(obj1);//{name:['aaa','b']}
console.log(obj2);//{name:['a','b']}

 

二、jQuery框架与Vue框架的区别

(1)数据和视图的分离(解耦)

  jQuery的数据和视图混在一起,没有视图和数据分离。不利于复用。

  vue中找数据和dom是非常方便的,数据和视图是分离的,数据就是data。

(2)以数据驱动视图

  jQuery需要直接操作dom修改,而vue是以数据驱动视图,只关心数据的变化,dom操作被封装。

 

动态给ul添加li标签

jQuery:
var ul=document.getElementById('ul');
var str='';
for(var i=0;i<arr.length;i++){
    str+='<li>'+arr[i]+'</li>';
}
ul.appendChild(str);

vue:
<ul v-for='item in arrList'>
    <li>{{item}}</li>
</ul>

data:{
    arrList:[];
}

 

posted @ 2018-03-18 16:59  安xiao曦  阅读(171)  评论(0编辑  收藏  举报