//es5 和es6 创建对象得区别
function User(name,age){
this.name = name;
this.age = age;
}
class User{
constructor(name,age){
this.name = name;
this.age = age;
}
//es5添加静态方法
User.getClassName = function(){
return "User"
}
//es6添加静态方法
static getClassName(){ //es6都缩写为方法名()得形式
return 'User'
}
//es5添加类方法
User.prototype.changeName = function(name){
this.name = name;
}
User.prototype.changeAge = function(age){
this.age = age;
}
//es6定义类方法
changeName(name){
this.name = name;
}
changeAge(age){
this.age = age;
}
get info(){ //当info属性被调用触发该方法 ,get必须有return
return "name" + this.name +'age' +this.age;
}
//es5定义添加属性获取监听
Object.defineProperty(User.prototype,"info",{
get(){
return "name" + this.name +'age' +this.age;
}
})
}
class Manager extends User{
constructor(name,age,password){ //如果不指定会默认有
super(name,age);//先创建父对象,所有方法都加到父对象上
this.password = password;
}
//一步全部继承
changePassWord(password){
this.password = password;
}
}
function Manager(name,age,password){
User.call(this,name,age);//这个是先创建自身this,然后传入父类,父类的方法和原型都会之上manager的this
this.password = password;
}
//继承静态方法
Manager.__proto__ = User; //Manager构造函数的构造函数上的原型对象 。。好绕
//继承 prototype 方法
Manager.prototype = User.prototype;
//添加新的方法
Manager.prototype.changePassword = function(pwd){
this.password = pwd;
}
var manager = new Manager("nan_kk",22,'123');
manager.changePassword("aini")
console.log(manager)
console.log(typeof User)//es6class是语法糖
浅谈 es5 与es6 对象构造和继承
猜你喜欢
转载自blog.csdn.net/weixin_38098195/article/details/81605811
今日推荐
周排行