ES6 面向对象 class 类

新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

传统的写法

<script>
    function People(name){
        this.name=name;     
    }
    
    People.prototype.sayName=function(){
        console.log(this.name);
    }
    
    var p=new People('zl');
    p.sayName();  //zl
</script>

class ES6新写法

<script>
    class People{   //class开头写,
        constructor (name){     //当使用new来创建对象,会自动调用这个函数
            this.name=name
        }
        sayName(){  //共享的方法(方法会挂载到原型身上)
            console.log(this.name)  
        }
    }
    
    var p=new People('zl');
    p.sayName();  //zl
</script>

ES6的类,完全可以看作构造函数的另一种写法

constructor中的属性和方法会自动调用,sayName中的方法会挂载到原型上,实现共享

注意:class没有提升

私有方法:

_bar(baz) {
    return this.snaf = baz;
}

上面代码中,_bar方法前面的下划线,表示这是一个只限于内部使用的私有方法。但是,这种命名是不保险的,在类的外部,还是可以调用到这个方
法。

class 里的继承 extends super

extends [iksˈtendz] 延长延续

语法:

class Cat extends Animal{}

定义一个Cat类,该类通过extends关键字,继承了Animal类的所有属性和方法。

例子

class Cat extends Animal{
    constructor(x,y,name){
        super(x,y);
        this.name=name
    }
}

注意:

子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

ES5 的继承,实质是先创造子类的实例对象this,然后再将父类的方法添加到this上面(Parent.apply(this))。

ES6 的继承机制完全不同,实质是
先创造父类的实例对象this(所以必须先调用super方法),然后再用子类的构造函数修改this。

静态方法 static

class People {
    static print(){
        console.log(100)
    }
}

var p = new People();

p.print()//报错

所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承。而是直接通过类来调用,这就称为“静态方法”

这能这样调用
People.print();

父级的静态方法可以被子级继承

继承后子级可以调用父级的方法

class Foo {
    static classMethod() {
        console.log('我被继承了');
    }
}
class Bar extends Foo {
}

Bar.classMethod(); 

ES6规定class只有静态方法没有静态属性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • class的基本用法 概述 JavaScript语言的传统方法是通过构造函数,定义并生成新对象。下面是一个例子: ...
    呼呼哥阅读 9,551评论 3 11
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 4,900评论 0 2
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,618评论 0 11
  • 第四章 面向对象 面向对象思想 面向对象思想的引入前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码...
    chongsheng阅读 3,848评论 0 0
  • String String类头 子串 substring第二个参数为不想赋值的第一个位置。此函数赋值0、1、2。 ...
    JabinYan阅读 3,398评论 0 0

友情链接更多精彩内容