没错,你没有看错,虽然前面说JS是原型继承,但在ES6以后新增了class关键字!!!

不过底层实作仍然是以原型继承方式进行,所以基本上算是一个语法糖。

今天我们就来看一下如何使用吧!

class

首先先来看一个最简单的class例子。

class Person{

constructor(val){

this.age = val;

}

say(){

return“Hi!”;

}

}

var Jason = new Person(29);

Jason instanceof Person;//true

Jason.age;//29

Jason.say();//“Hi!”

在类别(class)中可以明确定义一个建构式函式,会在建立新的Person物件时被呼叫,在类别主体内也能直接新增方法。

当然我们也可以用原本的原型继承来写。

function Person(val){

this.age = val;

}

Person.prototype.say =“HI!”;

var Jason = new Person(29);

但是,要注意如果用类别的话要注意Hoisting的问题!!

var Jason = new Person(29);//ReferenceError: Person is not defined

class Person{

constructor(val){

this.age = val;

}

say(){

return“Hi!”;

}

}

静态方法Static methods

一个类别的静态方法,不需要被实例化就可以被呼叫,不过也无法被实例化的新物件使用,也就是只能类别层级使用(vmwork)。

class Person{

constructor(val){

this.age = val;

}

say(){

return“Hi!”;

}

static evilThink(){

return“I want steal somthing”

}

}

var Jason = new Person(29);

“evilThink”in Jason;//false

Person.evilThink();//“I want steal somthing”

用原型继承可以这样写。

function Person(val){

this.age = val;

}

Person.evilThink = function(){

return“I want steal somthing”

}

Person.prototype.say = function(){

return“HI!”;

}

var Jason = new Person(29);

“evilThink”in Jason;//false

Person.evilThink();//“I want steal somthing”

extends建立子类别

可以用extends建立子类别。

class Person{

constructor(age,weight){

this.age = age;

this.weight = weight;

}

say(){

return“Hi!”;

}

}

class trickyMan extends Person{

say(){

return“R~”

}

}

var Jason = new trickyMan(29,96);

Jason instanceof Person;//true

Jason instanceof trickyMan;//true

Jason.say();//“R~”

用原型继承则是这样写。

function Person(age,weight){

this.age = age;

this.weight = weight;

}

Person.prototype.say = function(){

return“HI!”;

}

function tricky(){}

tricky.prototype.say = function(){

return“R~”;

}

var Jason = new tricky(29);

Jason.say();//“R~”

super呼叫父类别

如果要在子类别呼叫父类别可以用super。

class Person{

constructor(age,weight){

this.age = age;

this.weight = weight;

}

say(){

return“Hi!”;

}

}

class trickyMan extends Person{

say(){

return super.say();

}

}

var Jason = new trickyMan(29,96);

Jason.say();//“HI!”

如果用原型继承来写的话。

function Person(age,weight){

this.age = age;

this.weight = weight;

}

Person.prototype.say = function(){

return“HI!”;

}

function tricky(){}

tricky.prototype.say = function(){

return Person.prototype.say()

}

var Jason = new tricky(29);

Jason.say();//“HI!”

以上就是class的用法,一样如果有错误及来源未附上也欢迎留言指正,那么我们明天见(leafor)。

学JS的心路历程 - JS的Class的更多相关文章

  1. 学JS的心路历程 - JS应用

    各家电商网站都推出了各种活动和现今优惠券,当时在逛PTT时看到了有篇文章,提供代码教大家用JS的方式抢票,看了一下后发现好像很多人好奇这是怎么做的,于是就想说想一篇文章来讲解一下. 我们先来看一下折价 ...

  2. 学JS的心路历程-JS支持面向对象?(二)

    昨天讲了面向对象的继承,今天我们来谈谈多态和封装吧! 多态polymorphism 抽象讲法解释,就是使用单一界面操作多种型态的物件 继承父类别,定义与父类别中相同的方法,但实作内容不同,称为复写(o ...

  3. 学JS的心路历程-JS支持面向对象?(一)

    昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特 ...

  4. 学JS的心路历程 -函式(三)this

    this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...

  5. 学JS的心路历程Day26 - PixiJS -入坑

    后来知道也可以透过canvas让网页动起来! 而PixiJS是使用WebGL在canvas上绘制内容与制作动态 且同时有下列特色: 支持多点触控 掩码与混合模式 可外加WebGL滤镜 多装置支持 等等 ...

  6. 学JS的心路历程-物件与原型(三)

    昨天有说明到函式与建构式的原型,及指定建构式函式原型为另一个建构式函式,但其实这会造成复写constructor的问题. 复写constructor的问题(vmwork) 我们昨天有提到「建构式函式可 ...

  7. 学JS的心路历程 -物件与原型(二)

    昨天有提到说Object.setPrototypeOf可以指定一个物件为另一个物件的原型,但有想过到底这个原型,也就是[[Prototype]]最终会到何处吗? 答案是Object.prototype ...

  8. 学JS的心路历程-物件与原型(一)

    前两天说明面向对象的三大特性及JS不符合面向对象,只能称作支持面向对象而已,今天我们来看看JS的原型继承. 首先我们先来看,什么是原型(vmwork): 两个物件之间的原型关系(prototype r ...

  9. 学JS的心路历程-闭包closure

    闭包是是纯函式语言的一个特性,也是JS的一个关键性的特色,虽然不了解也能开发程序,但我们不是这种人对吧? 闭包不仅可以减少某些高阶功能的代码数量和复杂度,并且可以让我们做到原本无法做的复杂功能.听到这 ...

随机推荐

  1. CS229 7.2 应用机器学习方法的技巧,准确率,召回率与 F值

    建立模型 当使用机器学习的方法来解决问题时,比如垃圾邮件分类等,一般的步骤是这样的: 1)从一个简单的算法入手这样可以很快的实现这个算法,并且可以在交叉验证集上进行测试: 2)画学习曲线以决定是否更多 ...

  2. 并发编程:IO多路复用。

    一  IO模型: Stevens在文章中一共比较了五种IO Model: * blocking IO#阻塞模型 * nonblocking IO#非阻塞 * IO multiplexing#多路复用 ...

  3. Android忘记锁屏密码如何进入手机?

    Android忘记锁屏密码如何进入手机?     1.关闭手机 2.进入recovery模式(即恢复模式,记住不是挖煤模式.进入恢复模式不同手机有不同方法,三星的话安主页键,关机键和音量+(或-键), ...

  4. 闭包 -> 函数的嵌套

    内层函数对外层函数中的变量的使用 好处: 1. 保护变量不被侵害 2. 让一个变量常驻内存 如何通过代码查看一个闭包 __closure__: 有东西就是闭包. 没东西就不是闭包 # 闭包的优点: # ...

  5. gentoo openrc 开机打印信息

    gentoo openrc 开机的时候,最开始 一些硬件的信息, 后面是一些内核和驱动的信息. 硬件的信息是默认保存到 /var/log/dmesg 中, 可以使用 dmesg | less 来查看硬 ...

  6. 网络表示学习Network Representation Learning/Embedding

    网络表示学习相关资料 网络表示学习(network representation learning,NRL),也被称为图嵌入方法(graph embedding method,GEM)是这两年兴起的工 ...

  7. 31.网站数据监控-2(scrapy文件下载)

    温州数据采集 这里采集网站数据是下载pdf:http://wzszjw.wenzhou.gov.cn/col/col1357901/index.html(涉及的问题就是scrapy 文件的下载设置,之 ...

  8. <转载>http头 http://www.cnblogs.com/meil/archive/2007/03/06/665843.html

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型.客户 ...

  9. 机器学习进阶-图像金字塔与轮廓检测-图像金字塔-(**高斯金字塔) 1.cv2.pyrDown(对图片做向下采样) 2.cv2.pyrUp(对图片做向上采样)

    1.cv2.pyrDown(src)  对图片做向下采样操作,通常也可以做模糊化处理 参数说明:src表示输入的图片 2.cv2.pyrUp(src) 对图片做向上采样操作 参数说明:src表示输入的 ...

  10. 机器学习入门-数值特征-对数据进行log变化

    对于一些标签和特征来说,分布不一定符合正态分布,而在实际的运算过程中则需要数据能够符合正态分布 因此我们需要对特征进行log变化,使得数据在一定程度上可以符合正态分布 进行log变化,就是对数据使用n ...