ES6中class类用法

之前想要通过javascript来实现类,通常会采用如下构造函数的模式:

 1 function Person(name,age,job){
 2   this.name = name;
 3   this.age = age;
 4   this.job = job;
 5   this.friends = [‘Shelby‘,‘Court‘];
 6 }
 7 Person.prototype = {
 8   constructor:Person,
 9   sayName: function(){
10   document.write(this.name);
11  }
12 }

然后通过实例化调用:

1 var person1 = new Person(‘lf‘,23,‘software engineer‘);
2 person1.sayName();

下面看看使用ES6的类如何处理:

 1 class Person {
 2  constructor(name, age, job) {
 3   this.name = name;
 4   this.age = age;
 5   this.job = job;
 6   this.friends = [‘Shelby‘,‘Court‘]
 7  }
 8
 9  sayName () {
10   document.write(this.name);
11  }
12 }

可以看到简便了不少。

Class语法的推出可不光光是为了简化噢,还有很多关键字。比如:

static关键字用来定义类的静态方法,静态方法是指那些不需要对类进行实例化,使用类名就可以直接访问的方法。静态方法经常用来作为工具函数:

 1 class Point {
 2   constructor(x, y) {
 3     this.x = x;
 4     this.y = y;
 5   }
 6   static distance(a, b) {
 7     const dx = a.x - b.x;
 8     const dy = a.y - b.y;
 9     return Math.sqrt(dx*dx + dy*dy);
10   }
11 }
12 const p1 = new Point(5, 5);
13 const p2 = new Point(10, 10);
14 console.log(Point.distance(p1, p2));

但是需要注意的是,ES6中不能直接定义静态成员变量,但是我们可以通过另外的方式来实现:

1 static get baseUrl() {
2   return ‘www.baidu.com‘
3 }

在类语法推出之前,我们想要实现继承,必须通过prototype来指定对象,而现在我们可以通过extends关键字来实现继承

 1 class Animal {
 2  constructor(name) {
 3   this.name = name;
 4  }
 5  speak() {
 6   console.log(this.name + ‘ makes a noise.‘);
 7  }
 8 }
 9 class Dog extends Animal {
10  speak() {
11   console.log(this.name + ‘ barks.‘);
12  }
13 }

但是需要注意的一点就是,继承的原理还是在利用prototype这点没有变,只不过extends裹了一层语法糖而已。

希望本文所述对大家ECMAScript程序设计有所帮助。

时间: 2024-08-29 10:54:16

ES6中class类用法的相关文章

ES6中的类

前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScript 6中引入了类的特性.本文将详细介绍ES6中的类 ES5近似结构 在ES5中没有类的概念,最相近的思路是创建一个自定义类型:首先创建一个构造函数,然后定义另一个方法并赋值给构造函数的原型 function PersonType(name) { this.name = name; } Person

重学ES6(二):ES5和ES6中Class类的相同与不同

ES5和ES6中Class类的相同与不同 先说结论,简而言之ES5用function定义类,ES6用class定义类,class的本质是function,ES6中的类只是语法糖,它并没有改变ES5下类实现的本质. 类的定义 ES5 // ES5函数来描写类 // 声明类 let Animal = function (type) { this.type = type // 定义实例方法 this.drink = function () { console.log('drink') } } // 定

es6中class类的使用

在es5中我们是使用构造函数实例化出来一个对象,那么构造函数与普通的函数有什么区别呢?其实没有区别,无非就是函数名称用首字母大写来加以区分,这个不用对说对es5有了解的朋友都应该知道. 但是es5的这种方式给人的感觉还是不够严谨,于是在es6中就换成了class,就是把es5中的function换成了class,有这个单词就代表是个构造函数,然后呢对象还是new出来的,这一点并没有变化.    类的使用 从里面的代码我们可以看到除了function变成了class以外,其它的跟es5一样 cla

Android中Application类用法

原文:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息. Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(si

每天学习一点新技术,认真对待生活(es6中let的用法)

每天都要进步一点点!  今天开始学习新技术ES6 什么是ES6,ES2016,ES2017? ES6就是ES2015,也是一种泛指,指下一个新版本,从ES6开始,官方的叫法就不叫做ES6,叫做ES2015.以此类推. ES是一个不断迭代中的标准,一个功能是否最终进入ES标准,要经理四个阶段 stage0 最初的方案提案,并未经过大多数的慎重考虑 stage1 比较正规的提案 stage2 标准的提案 stage3 要考虑这个提案并融入标准之中. 以上是关于ES6的一些介绍,然后学习ES6之前应该

【转】Android中Application类用法

Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息. Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类. 通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那

es6中class类的全方面理解(二)------继承

继承是面向对象中一个比较核心的概念.ES6 class的继承与java的继承大同小异,如果学过java的小伙伴应该很容易理解,都是通过extends关键字继承.相较于ES5当中通过原型链继承要清晰和方便许多.先上代码: class Cucurbit{ constructor(name,color){ console.log("farther") this.name=name; this.color=color; } say(){ console.log("我的名字叫"

JavaScript、ES6中的类和对象

面向对象可以用于描述现实世界的事物,但是事物分为具体的(特指的)事物和抽象的(泛指的)事物. 面向对象思维的特点: 1.抽取(抽象)对象共有的属性和行为组织(封装)成一个类(模板) 2.对类进行实例化,获取类和对象 3.对象--特指的 1) 对象是一个具体的事物,一个苹果.一张网页.一个数据库.一个与远程服务器的连接也是对象: 2) javascript中 对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如,字符串.数值.数组.函数等. 属性:事物的特征,在对象中用属性来表示(常用名

C# 中Datetime类用法总结

收集了一些记录下来,这些有的是从网上找的,有些是自己使用到的: DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25dt.ToFileTime().ToString();//127756416859912816dt.ToFileTimeUtc().ToString();//127756704859912816dt.ToLocalTime().ToString();//2005-11-5 21:21:25dt.ToLongDa