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)差异很大,很容易让新学习这门语言的程序员感到困惑。
ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。
代码如下:
class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.x + ', ' + this.y + ')'; }}
constructor 方法,这就是构造方法,而 this 关键字则代表实例对象,实例的属性一般都在这里定义。
toString 方法,是类中定义的一个实例方法。注意:定义“类”的方法的时候,前面不需要加上function这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。
class Point { // ...}typeof Point // "function"Point === Point.prototype.constructor // true
上面代码表明,类的数据类型就是函数,类本身就指向构造函数。
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](https://i-blog.csdnimg.cn/blog_migrate/398a307d1c8a7f749bb13a2d7443aca0.jpeg)