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. rails安装使用版本控制器的原因。

    使用版本控制器的原因: 你没有系统根权限,所以你没有别的选择 你想要分开运行几个rails 系统 ,并且这几个rails有不同的Ruby版本.使用RVM就可以轻松做到. 没有什么新鲜的先安装xcode ...

  2. TCP报文格式和三次握手——三次握手三个tcp包(header+data),此外,TCP 报文段中的数据部分是可选的,在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。

    from:https://blog.csdn.net/mary19920410/article/details/58030147 TCP报文是TCP层传输的数据单元,也叫报文段. 1.端口号:用来标识 ...

  3. [转载]Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)

    本文主要解决一个问题,如何实现二叉树的前中后序遍历,有两个要求: 1. O(1)空间复杂度,即只能使用常数空间: 2. 二叉树的形状不能被破坏(中间过程允许改变其形状). 通常,实现二叉树的前序(pr ...

  4. 什么是API?我们常说调用API

    如果你不知道 API 是什么,说明你英语真的很差. API 就是 Application Programming Interface 三个单词,如果你不能顾名思义的话,我就举例说明. 1. DOM A ...

  5. IIS服务器禁用缓存的方法

    IIS服务器禁用缓存的方法: 工作中经常有实施的同事问我为什么界面皮肤图片替换后网站上没反应,要等很久才会出现结果.这个其实是服务器缓存的设置引起的问题,以前不知道怎么解决,临时的清缓存文件夹,有时候 ...

  6. centos7.3安装配置vsftp

    首先使用命令查看,系统内是否安装了vsftp [root@instance_290388 down]# rpm -qa |grep vsftp 如果没有安装,使用命令,进行安装 [root@insta ...

  7. MQTT再学习 -- 搭建MQTT服务器及测试

    最近在搞 PM2.5 采集,需要用到 MQTT 传输协议.协议部分看了几天的,讲的七七八八.本身在 intel 上有 写好的MQTT 的源码,现在的工作其实也就是移植到单片机上或者DM368板卡上.不 ...

  8. 为Python编写一个简单的C语言扩展模块

    最近在看pytorh方面的东西,不得不承认现在这个东西比较火,有些小好奇,下载了代码发现其中计算部分基本都是C++写的,这真是要我对这个所谓Python语音编写的框架或者说是库感觉到一丢丢的小失落,细 ...

  9. CF1082G:G. Petya and Graph(裸的最大闭合权图)

    Petya has a simple graph (that is, a graph without loops or multiple edges) consisting of n n vertic ...

  10. BZOJ4025: 二分图【线段树分治】【带撤销的并查集】

    Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. Input ...