
ES6之class
jiaojsun
做一只快乐的小码龙
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ES6之class--01类的由来和使用
由于class这块老是卡壳,所以整理两篇博文出来,本文主要参考《ES6入门》和《JS高程》,《JS权威指南》 1)类的由来 首先明确一下构造函数的概念,《JS高程》中定义 构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的var person = new Object()。这行代码创建了Object引用类型的一个新实例,然后把该实例保存在了变量person中,使用的构造函...原创 2019-02-07 15:03:03 · 337 阅读 · 0 评论 -
ES6之class--02constructor方法和类的实例
1)constructor 方法 constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。 class Point { } // 等同于 class Point { constructor() {} } 上面代码中,定义了一个空的类Poi...原创 2019-02-07 17:16:29 · 1059 阅读 · 0 评论 -
ES6之class--03取值、存值、表达式
1)取值函数(getter)和存值函数(setter) 与 ES5 一样,在“类”的内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为。 class MyClass { constructor() { // ... } get prop() { return 'getter'; } set prop(value...原创 2019-02-07 17:31:30 · 874 阅读 · 0 评论 -
ES6之class--04注意点
1)严格模式 类和模块的内部,默认就是严格模式,所以不需要使用use strict指定运行模式。只要你的代码写在类或模块之中,就只有严格模式可用。考虑到未来所有的代码,其实都是运行在模块之中,所以 ES6 实际上把整个语言升级到了严格模式。 2)不存在提升 类不存在变量提升(hoist),这一点与 ES5 完全不同。 new Foo(); // ReferenceError...原创 2019-02-07 17:56:25 · 296 阅读 · 0 评论 -
ES6之class--05静态方法和实例属性的新方法
1)静态方法 类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。 class Foo { static classMethod() { return 'hello'; } } Foo.classMethod() // 'hello' var foo...原创 2019-02-07 20:09:56 · 307 阅读 · 0 评论 -
ES6之class--06静态属性、私有方法、new.target 属性
1)静态属性 class Foo { } Foo.prop = 1; Foo.prop // 1 上面的写法为Foo类定义了一个静态属性prop。 目前,只有这种写法可行,因为 ES6 明确规定,Class 内部只有静态方法,没有静态属性。 现在有一个提案提供了类的静态属性,写法是在实例属性法的前面,加上static关键字。 class MyClass { sta...原创 2019-02-07 20:34:37 · 1062 阅读 · 0 评论 -
ES6之class--07继承简介和Object.getPrototypeOf()
1)继承简介 Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。 class Point { } class ColorPoint extends Point { } 看一个例子 class ColorPoint extends Point { constructor(x, y, color) { super...原创 2019-02-07 20:45:39 · 336 阅读 · 0 评论 -
ES6之class--08继承之super
1)super关键字 super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。 1.当函数用 第一种情况,super作为函数调用时,代表父类的构造函数。ES6 要求,子类的构造函数必须执行一次super函数。 class A {} class B extends A { constructor() { super(); } }...原创 2019-02-07 22:59:03 · 165 阅读 · 0 评论 -
ES6之class--09类的 prototype 属性和__proto__属性
先回忆一下上面的几张图 大多数浏览器的 ES5 实现之中,每一个对象都有__proto__属性,指向对应的构造函数的prototype属性。Class 作为构造函数的语法糖,同时有prototype属性和__proto__属性,因此同时存在两条继承链 (1)子类的__proto__属性,表示构造函数的继承,总是指向父类。 (2)子类prototype属性的__proto__属性,表...原创 2019-02-07 23:08:45 · 1029 阅读 · 2 评论