一、拷贝创建对象的原理
//拷贝创建对象核心代码
function extend(target,source) {
//遍历对象
for(var i in source){
target[i] = source[i];
}
return target;
}
//游戏随机生成名字
var boy = {
name:'无忌'
,image:'男性头像'
,age:20
,sex:'男'
};
var gril = {
name:'风晴雪'
,age:18
,image:'女性头像'
,sex:'女'
};
var zuixiake = extend({}, boy);
zuixiake.name='醉侠客';
console.log(zuixiake.name);//醉侠客
console.log(zuixiake.sex);//男
二、拷贝进阶用法
<script>
//extend2实现的功能:extend(target,obj1,obj2,obj3)
function extend () {
var key,i = 0,len = arguments.length,target = null,copy;
if(len === 0){
return;
}else if(len === 1){
target = this;
}else{
i++;
target = arguments[0];
}
for(; i < len; i++){
for(key in arguments[i]){
copy = arguments[i][key];
target[key] = copy;
}
}
return target;
}
function extend2(){
for (var p in source) {
if (source.hasOwnProperty(p)) {
target[p] = source[p];
}
}
return target;
}
//游戏随机生成名字
var boy = {
name:'无忌'
,image:'男性头像'
,age:20
,sex:'男'
};
//技能名称,等级,伤害值,需要的魔法
var technology = {tname:'亡灵复活',tlevel:10,tstrength:3000,tmagic:30};
var shenqi = {sname:'霜之哀伤',slevel:30,sstrength:3000};
//当这个人有了穿上盔甲,圣衣,六神合体,戴上魔法戒指之后,自动也拥有一个技能
//第一种用法
var zuixiake = extend({}, technology,shenqi);
zuixiake.name='醉侠客';
console.log(zuixiake.name);//醉侠客
console.log(zuixiake.tname);//亡灵复活
console.log(zuixiake.sname);//霜之哀伤
//第二种用法
extend(boy,technology,shenqi);
console.log(boy.name);//无忌
console.log(boy.tname);//亡灵复活
console.log(boy.sname);//霜之哀伤
</script>