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