• es5 和 es6 class


    // ES5
    function User(name,age) {
        this.name = name;
        this.age = age;
    }
    
    // 静态方法
    User.getClassName = function(){
        return 'User'
    }
    
    User.prototype.changeName = function(name){
        this.name = name
    }
    
    User.prototype.changeAge = function(Age){
        this.Age = Age
    }
    
    Object.defineProperty(User.prototype,'info',{
        get(){
            return 'name'+this.name+'age'+this.age
        }
    })
    // 子类
    function Manager(name,age,password){
        User.call(this,name,age);
        this.password = password
    }
    
    // 继承静态方法
    Manager.__proto__ = User
    
    // 继承原型方法
    Manager.prototype = User.prototype;
    
    //添加新方法
    Manager.prototype.changePassword = function(pwd){
        this.password = password
    }
    var manager = new Manager('leo',22,'123');
    manager.changeName('zengliang');
    console.log(User.name) //User
    console.log(manager.name) //zengjiang
    
    function test(){
        console.log("1")
    }
    console.log(test.name) //test

    ES6

    // function User(name,age) {
    //     this.name = name;
    //     this.age = age;
    // }
    class User {
        constructor(name,age){
            this.name = name;
            this.age = age;        
        }
        // // 静态方法
        // User.getClassName = function(){
        //     return 'User'
        // } 
        static getClassName(){
            return 'User'
        }
        // 方法的定义
        // User.prototype.changeName = function(name){
        //     this.name = name
        // }
    
        // User.prototype.changeAge = function(Age){
        //     this.Age = Age
        // }
        changeName(name){
            this.name = name
        }
        changeAge(age){
            this.age = age
        }
    
        // 自定义属性
        // Object.defineProperty(User.prototype,'info',{
        //     get(){
        //         return 'name'+this.name+'age'+this.age
        //     }
        // })
        get info(){
            return 'name'+this.name+'age'+this.age
        }
    }
    
    
    // 子类
    // function Manager(name,age,password){
    //     User.call(this,name,age);
    //     this.password = password
    // }
    class Manager extends User{
        // 和call的区别,call先创建自身对象
        constructor(name,age,password){
            // super先创建父对象 必须
            super(name,age);
            this.password = password
        }
        // //添加新方法
        // Manager.prototype.changePassword = function(pwd){
        //     this.password = password
        // }
        changePassword(password){
            this.password = password
        }
        get info(){
            var info = super.info;
            console.log(info)
        }
    }
    // 下面的静态方法跟原型方法已经继承了,无须写其他的
    
    // // 继承静态方法
    // Manager.__proto__ = User
    
    // // 继承原型方法
    // Manager.prototype = User.prototype;
    
    console.log(typeof User,typeof Manager)//function function
    // var manager = new Manager('leo',22,'123');
    // manager.changeName('zengliang');
    // console.log(User.name) //User
    // console.log(manager.name) //zengjiang
    
    // function test(){
    //     console.log("1")
    // }
    // console.log(test.name) //test

    不会提升

    // // 立即执行
    // let user = new class User{
    //     constructor(name){
    //         this.name = name
    //     }
    // }('zengliang');
    // console.log(user)
    
    
    // 会报错,因为不会提升
    // var user = new User()
    // class User{
    //     constructor(name){
    //         this.name = name
    //     }
    // }
  • 相关阅读:
    数组
    将WebBrowser的cookie信息传给HttpWebRequest
    NC调试时客户端报错:nc.ui.sm.login.Loader2.<init>
    本地连接与无线网络连接消失的解决办法
    Access建表语句
    SQLServer触发器的使用
    SQLServer常用命令
    SendKeys中的特殊字符
    asp.net中使用ajax提示“'Sys'未定义”错误
    WIN7的各种安装方法
  • 原文地址:https://www.cnblogs.com/mr-pz/p/6056420.html
Copyright © 2020-2023  润新知