JS语言的传统方法是通过构造函数,定义并生成新对象,是一种基于原型的面向对象系统。在ES6中新增加了类的概念,可以使用 class 关键字声明一个类,之后以这个类来实例化对象。
1.先来看看es5与es6的写法:
(1)构造函数示例:
const Animal = function (name, age) {
this.name= name;
this.age = age;
return this;
}; Animal.prototype = {
constructor: Animal,
print: function () {
console.log(this.name+ ' ' + this.age);
}
}; const panda= new Animal('熊猫', '3').print();

(2)使用ES6提供的class改写为:

class Animal {
constructor(name,age){
this.name=name;
this.age=age;
return this;
} print(){
console.log(this.name+''+this.age);
}
} const panda=new Animal('熊猫', '3');
panda.print()

2.现在来看看es6的类如何使用?

(1)类的声明

先声明一个最简单的Animal类,类里只有一个print方法,方法中打印出传递的参数。

class Animal{
print(val){
console.log(val);
}
}

(2)类的使用

我们已经声明了一个类,并在类里声明了print方法,现在要实例化类,并使用类中的方法。

class Animal{
print(val){
console.log(val);
}
}
let p= new Animal();
p.print('熊猫');

输出结果为:熊猫。

    (2.1)类的多方法声明

我们在上述基础上在声明一个eat方法。

class Animal{
print(val){
console.log(val);
}
eat(val){
console.log(this.print("熊猫"),"eat===>",val)
}
}
let panda= new Animal(); panda.eat("竹子")

此时我们会发现输出的结果为:

也就是this.print("熊猫") 这句代码出现了undefined。这是为啥呢?

这是由于类中的print方法没有返回值造成的,我们给print方法返回值,代码如下:

class Animal{
print(val){
console.log(val);
return val;
}
eat(val){
console.log(this.print("熊猫"),"eat===>",val)
}
}
let panda= new Animal(); panda.eat("竹子")

此时的结果为:

这里需要注意的是两个方法中间不要写逗号了,还有这里的this指类本身,还有 使用return返回值。

(3) 类的传参

在类的参数传递中我们用constructor( )进行传参。传递参数后可以直接使用this.xxx进行调用。

例如一开始时我们改写的代码一样,现在再把该代码贴出如下:

class Animal {
constructor(name,age){
this.name=name;
this.age=age;
return this;
} print(){
console.log(this.name+''+this.age);
}
} const panda=new Animal('熊猫', '3');
panda.print()

使用constructor来约定了传递参数,然后在print方法中打印。

(4)class的继承

类的一大特点就是继承。ES6中也有继承,使用关键子extends。

例如,现在有一个动物,除了基本的姓名与年龄外,还有独特的爱好--唱歌,我们该怎么处理呢,这里用到了类的继承,代码如下:

class Bird extends Animal{
sing(val){
console.log("唱",val)
}
} let bird=new Bird("鹦鹉",3)
bird.sing("国歌")

输出结果为:

未完,待续。。。。

ES6系列_15之class类的使用的更多相关文章

  1. [js高手之路] es6系列教程 - 新的类语法实战选项卡

    其实es6的面向对象很多原理和机制还是ES5的,只不过把语法改成类似php和java老牌后端语言中的面向对象语法. 一.用es6封装一个基本的类 class Person{ constructor( ...

  2. 大白话,讲编程之《ES6系列连载》汇总

    如果你经历过2,3年前的前端开发,你一定感受过兼容IE6,7的痛苦,一定用过网页三剑客的dreamweaver编写html,面试的时候面试官一定会问你:会用PS切图吗? 刚开始的时候你发现,web前端 ...

  3. [ES6系列-01]Class:面向对象的“新仇旧恨”

    [原创]CoderPower 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 这是公众号(码路工人有力量)开通后的第二篇,写得还是有待改进吧.这次准备写一个关于ES6基础的短文系列,努力尽快 ...

  4. ES6系列之项目中常用的新特性

    ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...

  5. UML系列03之 UML类图(二)

    概要 在"UML系列02之 UML类图(一) "中介绍了类图的基本构成--类的UML表示方法.本文是接着前文,继续对"UML的类图"中几种关系进行介绍.介绍的主 ...

  6. [js高手之路] es6系列教程 - 对象功能扩展详解

    第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...

  7. [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解

    接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般 ...

  8. ES6 系列之 Babel 是如何编译 Class 的(下)

    前言 ES5 寄生组合式继承 function Parent (name) { this.name = name; } Parent.prototype.getName = function () { ...

  9. 深入解析ES6 更易于继承的类语法的使用

    和其它面向对象编程语言一样,ES6 正式定义了 class 类以及 extend 继承语法糖,并且支持静态.派生.抽象.迭代.单例等,而且根据 ES6 的新特性衍生出很多有趣的用法. 一.类的基本定义 ...

随机推荐

  1. redhat7下mysql5.7.12重启电脑后起不来问题

    环境介绍: 64位reahat7 mysql5.7.12 初次安装后mysql运行是正常的,重启操作系统后检查mysql运行状态如下: [root@localhost ~]# systemctl st ...

  2. Hive之GROUP BY详解

    一,GROUP BY 执行理解 先来看下表1,表名为test: 表1 执行如下SQL语句: SELECT name from test GROUP BY name ;   你应该很容易知道运行的结果, ...

  3. UVA-673 Parentheses Balance(栈)

    题目大意:给一个括号串,看是否匹配. 题目分析:一开始用区间DP写的,超时了... 注意:空串合法. 代码如下: # include<iostream> # include<cstd ...

  4. 最短路之SPFA算法

    部分来自:http://blog.csdn.net/juststeps/article/details/8772755 求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了. ...

  5. delphi向SQL Server2005中存取图片

    SQL Server2005中,我用image类型来存取图片,首先把数据库表设置好 例如我的pic表有如下两列:时间,图片. delphi中,我用ADOQuery来连接数据库,但是数据库中有好几张表, ...

  6. mybatis----Integer = 0 刷选不出来条件原因以及sql改法

    Xml写法: POJO: 当status的值为 0时该where SQLand status = 0并未正常拼接,也就是说test内的表达式为false,从而导致查询结果错误.但是,显然该值(Inte ...

  7. 201621123010《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词. 继承extends.多态.抽象类 超级父类Object类.父类.子类. 覆盖Override 初始化块 识别类 重载 1.2 ...

  8. 二叉树题目集合 python

    二叉树是被考察频率非常高的数据结构.二叉树是按照“父节点-左子树&右子树”这样的方式,由根节点不断向下扩展,形成一棵树的结构.二叉树经常被提到的三种遍历方式:前序遍历.中序遍历和后序遍历,既是 ...

  9. HTML5 Geolocation用来定位用户的位置。

    HTML5 Geolocation用来定位用户的位置. 定位用户的位置 HTMl5 Geolocation API用来得到用户的地理位置. 由于这个可能和个人隐私相关.除非用户同意否则不能使用. 浏览 ...

  10. 在 Windows 下安装 Oracle 11g XE (Express Edition)

    Oracle 11g XE 是 Oracle 数据库的免费版本,支持标准版的大部分功能,11g XE 提供 Windows 和 Linux 版本. 做为免费的 Oracle 数据库版本,XE 的限制是 ...