es6 class 理解以及对象拷贝 Object.assign()

es5 面向对象:

function User(name,pass){
this.name = name;
this.pass = pass;
}
User.prototype.showName = function(){
alert(this.name)
}
User.prototype.showPass = function(){
alert(this.pass)
}
function VipUser(name,pass,level){
User.call(this,name,pass);
this.level = level;
}
VipUser.prototype = new User();
VipUser.prototype.constructor=VipUser;
VipUser.prototype.showLevel = function(){
alert(this.level)
}
var v1 = new VipUser('wen','123456',1);
v1.showName();
v1.showPass();

v1.showLevel();

es6写法:

class User{

    constructor(name,pass){

        this.name = name;
this.pass = pass;

    }

    showName(){

        alert(this.name)

    }

   showPass(){

        alert(this.pass)

    }

}

class VipUser extends User{

    constructor(name,pass,level){

        super(name,pass);

        this.level = level;

    }

    showLevel(){

        alert(this.level);

    }

}

var v1 = new VipUser('wen','123456',1);
v1.showName();
v1.showPass();

v1.showLevel();

————————————————————

Object.assign()

克隆:

var obj = { a: 1 };

var copy = Object.assign({}, obj);

console.log(copy);

合并:

var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };
var obj = Object.assign(o1, o2, o3);
console.log(obj);
console.log(o1);  

obj 和 o1 是否同一份?

——————————————————————————————————————————————

下面输出结果是?

const defaultOpt = {

    title: {
        text: 'hello world',
        subtext: 'It\'s my world.'
    }
};
const opt = Object.assign({}, defaultOpt, {
    title: {
        subtext: 'Yes, your world.'
    }
});
console.log(opt);

——————————————————————————————————————————————

const defaultOpt = {

    title: {
        text: 'hello world',
        subtext: 'It\'s my world.'
    } 
};
const opt1 = Object.assign({}, defaultOpt);
const opt2 = Object.assign({}, defaultOpt);
opt2.title.subtext = 'Yes, your world.';


console.log('opt1:');
console.log(opt1);
console.log('opt2:');

console.log(opt2);

Object.assign() 只是一级属性复制,比浅拷贝多深拷贝了一层而已。用的时候,还是要注意这个问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值