es6 阮一峰_es6 的 class 与 es5 的语法对比

17491e1c5060b59338dd1deb63e33f31.png

bug收集:专门解决与收集bug的网站

网址:www.bugshouji.com

0 1 ECMAScript 5 中类的实现

大家都知道 ECMAScript 5 中是没有 class 这个概念的

但是 javascript 中还是可以使用面向对象的方式去编写代码的,因为面向对象是一种思想。ECMAScript 5 中使用原型对象来实现类似 class 的作用

代码如下:
function Point(x, y) {  this.x = x;  this.y = y;}Point.prototype.toString = function () {  return '(' + this.x + ', ' + this.y + ')';};var p = new Point(1, 2);

上面这种写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。

f5b9a9f4838e36f6b378a7f3f983e544.png

0 2 ECMAScript 6 中类的实现

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。

代码如下:

class Point {  constructor(x, y) {    this.x = x;    this.y = y;  }  toString() {    return '(' + this.x + ', ' + this.y + ')';  }}
constructor 方法,这就是构造方法,而 this 关键字则代表实例对象,实例的属性一般都在这里定义。 toString 方法,是类中定义的一个实例方法。注意:定义“类”的方法的时候,前面不需要加上function这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。

f16425202117e8f0bb22f4326b110b5c.png

0 3 两者的关系 基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已 ES6 的类,完全可以看作构造函数的另一种写法。
class Point {  // ...}typeof Point // "function"Point === Point.prototype.constructor // true

上面代码表明,类的数据类型就是函数,类本身就指向构造函数。

831fd7c56a28f03b0cc501178cbcac25.png

0 4 ECMAScript 6 中类的说明 class 的使用
class Bar {  doStuff() {    console.log('stuff');  }}var b = new Bar();b.doStuff() // "stuff"
类的 prototype 属性 事实上,类的所有方法都定义在类的prototype属性上面
class Point {  constructor() {    // ...  }  toString() {    // ...  }  toValue() {    // ...  }}// 等同于Point.prototype = {  constructor() {},  toString() {},  toValue() {},};

在类的实例上面调用方法,其实就是调用原型上的方法。

class B {}let b = new B();b.constructor === B.prototype.constructor // true
本文,参考阮一峰的文章,地址如下:https://es6.ruanyifeng.com/#docs/class

如果喜欢这篇文章,可以支持一下哟,分享、点赞、在看走一个,哈哈@_@

更多文章,请关注公众号【bug收集】 e3fcc7cb6663f65a5b4bd4e4ae6d5689.png
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页