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()
只是一级属性复制,比浅拷贝多深拷贝了一层而已。用的时候,还是要注意这个问题的。