前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >es6 的 class 与 es5 的语法对比

es6 的 class 与 es5 的语法对比

作者头像
用户9914333
发布2022-07-21 20:02:52
4120
发布2022-07-21 20:02:52
举报
文章被收录于专栏:bug收集bug收集

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

网址:www.bugshouji.com

01

ECMAScript 5 中类的实现

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

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

代码如下:

代码语言:javascript
复制
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)差异很大,很容易让新学习这门语言的程序员感到困惑。

02

ECMAScript 6 中类的实现

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

代码如下:

代码语言:javascript
复制
class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}

constructor 方法,这就是构造方法,而 this 关键字则代表实例对象,实例的属性一般都在这里定义。

toString 方法,是类中定义的一个实例方法。注意:定义“类”的方法的时候,前面不需要加上function这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。

03

两者的关系

基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已

ES6 的类,完全可以看作构造函数的另一种写法。

代码语言:javascript
复制
class Point {
  // ...
}

typeof Point // "function"
Point === Point.prototype.constructor // true

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

04

ECMAScript 6 中类的说明

class 的使用

代码语言:javascript
复制
class Bar {
  doStuff() {
    console.log('stuff');
  }
}

var b = new Bar();
b.doStuff() // "stuff"

类的 prototype 属性

事实上,类的所有方法都定义在类的prototype属性上面

代码语言:javascript
复制
class Point {
  constructor() {
    // ...
  }

  toString() {
    // ...
  }

  toValue() {
    // ...
  }
}

// 等同于

Point.prototype = {
  constructor() {},
  toString() {},
  toValue() {},
};

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

代码语言:javascript
复制
class B {}
let b = new B();

b.constructor === B.prototype.constructor // true

本文,参考阮一峰的文章,地址如下:

https://es6.ruanyifeng.com/#docs/class

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档