浅谈 es5 与es6 对象构造和继承

//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是语法糖

猜你喜欢

转载自blog.csdn.net/weixin_38098195/article/details/81605811
今日推荐