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. android-------非常好的图片加载框架和缓存库(Picasso)

    Picasso是Square公司开源的一个Android图形缓存库, 可以实现图片加载(本地和网络)和缓存功能. 地址:http://square.github.io/picasso/ jar包下载: ...

  2. Java队列的两种实现方式

    1. 基于数组 package Algorithm.learn; import java.util.Arrays; /** * Created by liujinhong on 2017/3/7. * ...

  3. BZOJ1228 [SDOI2009]E&D

    蒟蒻不会= = 话说写题解的巨巨也只会打表233 反正先A掉再说 /************************************************************** Pro ...

  4. c++ o2 优化

    有时候,写代码的时候要卡常 这时候就要用到o2优化 #pragma GCC optimize(2) 只要把这句话加在程序开头,就可以手动开o2优化了

  5. 集成学习之Boosting —— Gradient Boosting实现

    Gradient Boosting的一般算法流程 初始化: \(f_0(x) = \mathop{\arg\min}\limits_\gamma \sum\limits_{i=1}^N L(y_i, ...

  6. Win7操作系统安装IE10提示“安装前需要更新与安装程序版本”

    安装IE10浏览器时提示错误的 Internet Explorer安装程序版本 故障现象: Win7操作系统在安装IE10浏览器时会弹出对话框,提示错误的Ieternet Explorer 安装程序版 ...

  7. Alpha阶段贡献分配规则

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

  8. JSP Unable to compile class for JSP

    今天刚弄好MyEclipse环境,试了一下jsp的创建,然后就出现了一个很令人纠结的问题. 文档目录如下: Jsp代码如下: <%@page import="com.pd.Person ...

  9. 一台 linux 主机装两个mysql

    启动 3306 nohup /usr/local/mysql5.1.7/bin/mysqld_safe & 启动 3307/usr/local/mysql/bin/mysqld --defau ...

  10. 常见HTTP状态码(200、301、302、500等) 释义

    对网站管理工作者来说有个词不陌生,HTTP状态码,它是用以表示网页服务器HTTP响应状态的3位数字代码.状态码的第一个数字代表了响应的五种状态之一. 1XX系列:指定客户端应相应的某些动作,代表请求已 ...