博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js-ES6学习笔记-Class(6)
阅读量:5930 次
发布时间:2019-06-19

本文共 1644 字,大约阅读时间需要 5 分钟。

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

2、父类的静态方法,可以被子类继承。静态方法也是可以从super对象上调用的。

3、静态属性指的是Class本身的属性,即Class.propname,而不是定义在实例对象(this)上的属性。

ES6明确规定,Class内部只有静态方法,没有静态属性。

// 以下两种写法都无效class Foo {  // 写法一  prop: 2  // 写法二  static prop: 2}Foo.prop // undefined

4、ES7有一个静态属性的,目前Babel转码器支持。

这个提案对实例属性和静态属性,都规定了新的写法。

(1)类的实例属性——类的实例属性可以用等式,写入类的定义之中。

class ReactCounter extends React.Component {  constructor(props) {    super(props);    this.state = {      count: 0    };  }}

上面代码中,构造方法constructor里面,定义了this.state属性。

有了新的写法以后,可以不在constructor方法里面定义。

class ReactCounter extends React.Component {  state = {    count: 0  };}

(2)类的静态属性

类的静态属性只要在上面的实例属性写法前面,加上static关键字就可以了。

5、目前,有一个,为class加了私有属性。方法是在属性名之前,使用#表示。

6、new是从构造函数生成实例的命令。ES6为new命令引入了一个new.target属性,(在构造函数中)返回new命令作用于的那个构造函数。如果构造函数不是通过new命令调用的,new.target会返回undefined,因此这个属性可以用来确定构造函数是怎么调用的。

function Person(name) {  if (new.target !== undefined) {    this.name = name;  } else {    throw new Error('必须使用new生成实例');  }}// 另一种写法function Person(name) {  if (new.target === Person) {    this.name = name;  } else {    throw new Error('必须使用new生成实例');  }}var person = new Person('张三'); // 正确var notAPerson = Person.call(person, '张三');  // 报错

Class内部调用new.target,返回当前Class。需要注意的是,子类继承父类时,new.target会返回子类。

利用这个特点,可以写出不能独立使用、必须继承后才能使用的类。

class Shape {  constructor() {    if (new.target === Shape) {      throw new Error('本类不能实例化');    }  }}class Rectangle extends Shape {  constructor(length, width) {    super();    // ...  }}var x = new Shape();  // 报错var y = new Rectangle(3, 4);  // 正确

7、Mixin模式指的是,将多个类的接口“混入”(mix in)另一个类。可以将多个对象合成为一个类。使用的时候,只要继承这个类即可。

转载地址:http://uxktx.baihongyu.com/

你可能感兴趣的文章
[20180813]校内模拟赛
查看>>
视图切换—多模板文档视图结构的应用
查看>>
MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理
查看>>
WPF组件开发之组件的基类
查看>>
spark项目启动报内存溢出不能创建线程错误
查看>>
结对作业
查看>>
【第39题】2019年OCP认证12C题库062考试最新考试原题
查看>>
题目1362:左旋转字符串(Move!Move!!Move!!!)
查看>>
[kuangbin带你飞]专题一 简单搜索 Find a way HDU - 2612
查看>>
RMAN删除归档脚本
查看>>
tac
查看>>
app已损坏,打不开。你应该将它移到废纸篓
查看>>
oracle快速创建可用用户
查看>>
mysql 行转列 列转行
查看>>
【转载】Verilog语言中wire与reg的区别
查看>>
CSS代码写出的各种形状图形
查看>>
transform & transition @year12
查看>>
BestCoder Round #81 (div.2)
查看>>
LeetCode – Refresh – Word Break
查看>>
zabbix3.0.4通过自定义shell脚本添加对关键日志文件的监控
查看>>