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. Getting 'The AWS Access Key Id you provided does not exist in our records' error with Amazon MWS

    I upgraded from one version of Amazon MWS (marketplace web service) version https://mws.amazonservic ...

  2. angular 自定义指令参数详解

    restrict:指令在dom中的声明形式 E(元素)A(属性)C(类名)M(注释) priority优先级:一个元素上存在两个指令,来决定那个指令被优先执行 terminal:true或false, ...

  3. torchnet+VGG16计算patch之间相似度

    torchnet+VGG16计算patch之间相似度 torch VGG16 similarity 本来打算使用VGG实现siamese CNN的,但是没想明白怎么使用torchnet对模型进行微调. ...

  4. poj-2096-期望/dp

    http://poj.org/problem?id=2096 有n种病毒,s个服务器,每天等概率的在某个服务器上发现某一种病毒,问发现所有种类病毒且覆盖所有的服务器的期望天数. 利用全期望公式可以将期 ...

  5. UVA-11082 Matrix Decompressing (网络流建模)

    题目大意:给出一个由1到20组成的整数矩阵的每一行和每一列的和,构造这个矩阵.输出任意一个构造方案. 题目分析:将每一行视作一个点x,将每一列视作一个点y.对于矩阵中的每一个格子,都对应一个二元关系& ...

  6. hibernate的一些缺陷(转)

    例如用户在系统中,保存的信息包括简要信息(用户名.联系电话.Email.性别)和一些图像信息(照片).        但是在系统设计时,我的设计方式都是遵循业务的需要,设计一个“用户”类,包含用户名. ...

  7. Alpha阶段贡献分配规则

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2244] 分配规则: 1.每人有基础分3分. 2.每参加一次组内会议及活动加0. ...

  8. Linux:有趣的命令(更新)

    有趣的命令 oneko命令 执行后会有一只小猫跟着鼠标跑 yum install -y oneko oneko 鼠标拖动那只猫 取消Ctrl+c sl命令 执行后有一火车跑过 yum install ...

  9. Socket编程中检测端口是否被占用

            一般检测一个端口是否被占用的方法是看bind是否成功,其实在Windows中有两个API可以获取到当前系统端口的占用情况(GetTcpTable/GetUdpTable),利用这两个函 ...

  10. Android EditText 中hint文字大小以及与输入文字颜色保存一致

    SpannableString 这个就是用来处理android 文本信息 可编辑 可点击 感兴趣的自己去看! /* * Copyright (C) 2006 The Android Open Sour ...