Class 类

作者: _花 | 来源:发表于2017-10-20 14:14 被阅读0次

    1.简单介绍

    JavaScript传统的方法是通过构造函数定义并生成新对象;且ES5里面的继承是通过原型链来实现的,及一个构造函数的实例是另一个构造函数的原型,但在ES6里引入新的语法糖class,就可以像JAVA、C++那些面向对象的编程语言一样使用extends关键字来实现继承。class类同和构造函数一样也拥有自己的原型对象,也具有prototype指针,也是通过new操作符来生成自己的实例。

    //定义一个类

    calss Point{

             constructor(x,y){  //这里的constructor方法如果没有显示定义,一个空的constructor方法会被默认添加,他相当于构造函数

                      this.x = x;

                       this.y = y;

               }              //此处没有逗号,如果添加逗号程序就会报错

                toString(){         //类里面的方法前面不需要加上function保留字

                           return  ........

                 }

    }

    注意:类里面的方法几乎都是加在类的原型上的,及Point.prototype上。只有那些显式加在this上的属性才属于实例属性,比如:x,y

    实例的_proto_属性指向类的原型;例如:var p = new Point(2,3);p._proto_ = Point.prototype; Point.prototypre.constructor  = Point;

    实例、原型、类,和实例、原型、构造函数之间的关系是一样的。

    class类不存在变量提升:new Foo();class Foo{}; //这种写法是错的

    2.class 的继承

    class ColorPoint  extends Point{

            constructor(x,y,color){

                      super(x,y)        //调用父类的构造函数,自类里必须有super方法

                        this.color = color;

            }

            toString(){

                      return this.color + ' ' + super.toString(); //调用父类的toString()方法。

          }

    }

    注意:

    ColorPoint._proto_ === Point

    ColorPoint.prototype._proto_ === Point.prototype

    3.Object.getPrototypeOf()用于从子类上获取父类

    Object.getPrototypeOf(ColorPoint) == Point

    4.ES6允许继承原生构造函数定义子类。

    原生构造函数有:Boolean()、String()、Number()、Object()、Array()、Date()、Function()、Error()、RegExp()

    5.class的静态方法

    ES6规定类里面只有静态方法没有静态属性;

    class Foo {

                  static Method(){   //方法前加上static就是静态方法,静态方法只能由类来调用

                   } //Foo.Method()

    }

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

    ES7的类里面有静态属性一说,ES7里面实例属性的新写法同Angular2里面的写法一样。

    相关文章

      网友评论

          本文标题:Class 类

          本文链接:https://www.haomeiwen.com/subject/zpruuxtx.html