学JS的心路历程 - JS的Class
没错,你没有看错,虽然前面说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的更多相关文章
- 学JS的心路历程 - JS应用
各家电商网站都推出了各种活动和现今优惠券,当时在逛PTT时看到了有篇文章,提供代码教大家用JS的方式抢票,看了一下后发现好像很多人好奇这是怎么做的,于是就想说想一篇文章来讲解一下. 我们先来看一下折价 ...
- 学JS的心路历程-JS支持面向对象?(二)
昨天讲了面向对象的继承,今天我们来谈谈多态和封装吧! 多态polymorphism 抽象讲法解释,就是使用单一界面操作多种型态的物件 继承父类别,定义与父类别中相同的方法,但实作内容不同,称为复写(o ...
- 学JS的心路历程-JS支持面向对象?(一)
昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特 ...
- 学JS的心路历程 -函式(三)this
this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...
- 学JS的心路历程Day26 - PixiJS -入坑
后来知道也可以透过canvas让网页动起来! 而PixiJS是使用WebGL在canvas上绘制内容与制作动态 且同时有下列特色: 支持多点触控 掩码与混合模式 可外加WebGL滤镜 多装置支持 等等 ...
- 学JS的心路历程-物件与原型(三)
昨天有说明到函式与建构式的原型,及指定建构式函式原型为另一个建构式函式,但其实这会造成复写constructor的问题. 复写constructor的问题(vmwork) 我们昨天有提到「建构式函式可 ...
- 学JS的心路历程 -物件与原型(二)
昨天有提到说Object.setPrototypeOf可以指定一个物件为另一个物件的原型,但有想过到底这个原型,也就是[[Prototype]]最终会到何处吗? 答案是Object.prototype ...
- 学JS的心路历程-物件与原型(一)
前两天说明面向对象的三大特性及JS不符合面向对象,只能称作支持面向对象而已,今天我们来看看JS的原型继承. 首先我们先来看,什么是原型(vmwork): 两个物件之间的原型关系(prototype r ...
- 学JS的心路历程-闭包closure
闭包是是纯函式语言的一个特性,也是JS的一个关键性的特色,虽然不了解也能开发程序,但我们不是这种人对吧? 闭包不仅可以减少某些高阶功能的代码数量和复杂度,并且可以让我们做到原本无法做的复杂功能.听到这 ...
随机推荐
- Spring获取application.properties
方法一:@Value获取属性值 首先在application.properties中添加属性值 app.name=MyApp app.description=${app.name} is a Spri ...
- SVN上拖下来的项目,缺少build path怎么办?
在eclipse里用subeclipe从svn上拖下来的项目,看不见java build path怎么办? 原因那是因为你的两个配置文件:.project .classpath没有内容或者缺失. 重新 ...
- [Unity插件]Lua行为树(十):通用行为和通用条件节点
在行为树中,需要扩展的主要是行为节点和条件节点.一般来说,每当要创建一个节点时,就要新建一个节点文件.而对于一些简单的行为节点和条件节点,为了去掉新建文件的过程,可以写一个通用版本的行为节点和条件节点 ...
- win7 CMD登录本机MySQL数据库管理
- 重识linux-ntp时间服务器搭建
1 安装 yum install ntp 2 启动 service ntpd start 3 配置文件 /etc/ntp.conf 4 查看是否有报错 tail /var/log/message 5 ...
- hive orc update
hive-site.xml --><configuration> <!-- WARNING!!! This file is auto generated for documen ...
- WebForm(Application,ViewState,Repeater的Command操作)
一.AppliCation: 1.存储在服务器端,占用服务器内存 2.生命周期:永久 3.所有人都可访问的共有对象,一般用作服务器缓存 4.赋值:Application["key" ...
- centos7扩展根分区
参考网站:http://www.360doc.com/content/18/0128/11/52410512_725728162.shtml VirtualBox中安装了CentOS 7,给同事用来做 ...
- linux-2.6.22.6 内核源代码包的文件目录介绍
下载一个linux-2.6.22.6.tar并解压 再其解压的文件中加入下面的bat脚本 生成当前文件的目录树脚本如下: @rem 此BAT文件名一定不能是"tree.bat",否 ...
- offsetof使用小结
先上例子 #include <stdio.h> #include <stdlib.h> /* offsetof example */ #include <stddef.h ...