TypeScript完全解读(26课时)_7.ES6精讲 - 类Class基础

ES6精讲 - 类Class基础

 

es5中创建构造函数和实例

 

原来在es5中的写法

定义好Point后,在原型对象上定义getPostion的方法

实例自身是没有这个方法的,我们调用的时候会去创建他的构造函数上原型上往上寻找。原型也就是__proto__

输出的结果

调用getPosition方法

 

 

es6中

有了类的概念用class去定义一个类。

constructor是构造函数,this指向创建的实例。每个类的定义必须有constructor方法,若果你在定义类的时候没有写构造函数,它也会默认加上一个空的

getPosition方法是创建在Point的原型对象上的

多个方法之间可以用分号隔开,切记不要用逗号

 

 

 

也可以自己去返回一个对象

自己定义了return的返回,那么创建的实例就不再是你的实例了。这里我们使用instanceof来检测一下。返回的是false。我们创建的结果并不是你的类的实例的对象

es6中的类必须使用new 关键字去创建

生成的实例上添加属性或者方法

判断是否是实例上自身有的属性用hasOwnProperty,返回的结果是true说明自身就有这个属性

方法不是自有属性

getPostion实际上是p1继承来的。在原型__proto__上判断有没有这个属性getPosition返回true

 

取值函数get,存值函数set

es6中加入了set和get关键字,来看下他们是怎么使用的

设置为19

看完这个例子大概就知道set和get大概是干嘛的。把一个属性age拆开成两个存取值函数。

当我们去读取属性值的时候,就会调用get修饰的方法。

当我们给这个属性赋值的时候就会调用set修饰的方法,set修饰的方法有个参数newValue 就是新赋的值

 

 

在es6中类也可以使用set和set修饰

访问属性值

class表达式

函数有两种定义形式

class也有两种形式的定义:

第一种

第二种方式

最后实际的类型是Infos

 

静态方法

直接定义在类里面的方法都会被实例继承,如果不希望实例继承某个方法,只想这个方法被类本身调用的时候,就需要将方法标记为静态方法

使用static关键字来标识一个静态方法

每个类里面都有一个name属性

es5里面定义一个函数,打印出函数的name

 

只能Point自己调用。这就是静态方法的定义

实例属性的其他写法

这里定义的类,要添加到类上的属性都是通过this来添加

另外一种写法在 constructor的外面,并且给了z的初始值为0。这里因为没有安装es的loader所以只能在浏览器里面执行

 静态属性

es6中只有静态方法,并没有静态属性

通过这种形式可以实现静态属性

 

私有方法

目前es6并不提供私有方法、私有属性,需要使用一些技巧来实现

把方法定义在外面

通过实例是没有办法拿到func2的

 

第三种方式,用到es6中新增的基本数据类型symbol,唯一性,独一无二的

这里的p是没有办法拿到func1方法的

创建a.js

 

如果想调用必须拿到symbol值才可以调用,这就是通过symbol值定义私有方法

私有属性

就是属性前面加#号,处于提案阶段,暂时还没法使用

new.target

es6中新增的,一般用于构造函数中,返回new命令作用于的构造函数

new.target就表示构造函数

普通的调用方式

同样在类中也可以使用new.target

定义父类,子类继承父类

虽然是在父类中使用的new.target.这里的原因下节课学习了继承就清楚了

利用这个特点,我们就可以实现,定义一个类,这个类不能直接用来创建实例,只能通过继承它的子类来实例化

父类就会有异常

 

posted @ 2019-05-06 00:31  高山-景行  阅读(411)  评论(0编辑  收藏  举报