NodeJS学习笔记二_weixin_30563917的博客-程序员宝宝

技术标签: ViewUI  javascript  

类声明和类表达式


  ES6 中的类实际上就是个函数,而且正如函数的定义方式有函数声明和函数表达式两种一样,类的定义方式也有两种,分别是:类声明、类表达式。

类声明

  类声明是定义类的一种方式,就像下面这样,使用 class 关键字后跟一个类名(这里是 Ploygon),就可以定义一个类。

'use strict';
class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}
var p = new Polygon(10,20);
console.log('高度为:'+p.height);//10
console.log('宽度为:'+p.width);//20

  

变量提升

  类声明和函数声明不同的一点是,函数声明存在变量提升现象,而类声明不会。也就是说,你必须先声明类,然后才能使用它,否则代码会抛出 ——ReferenceError 异常,像下面这样:

'use strict';

var p = new Polygon(10,20);
console.log('高度为:'+p.height);
console.log('宽度为:'+p.width);
class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}


var p = new Polygon(10,20);
            ^

ReferenceError: Polygon is not defined
    at Object.<anonymous> (/demo.js:3:13)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:134:18)
    at node.js:961:3

  练习:

请声明一个类,命名为(Person),构造函数(constructor)中定义name属性,并定义一个实例方法sayName(){...}中打印'My name is'+this.name ,new Person('Lily'),调用sayName()方法,看结果。

'use strict';
class Person {
  constructor(name){
    this.name = name;
  }
  sayName(){
    console.log("My name is"+this.name);
  }
}

var p1 = new Person("张三");
p1.sayName();

  运行结果:

>   
> My name is张三

类表达式


类表达式是定义类的另外一种方式,就像函数表达式一样,在类表达式中,类名是可有可无的。如果定义了类名,则该类名只有在类体内部才能访问到。

'use strict';
// 匿名类表达式
var Polygon = class {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};
 
// 命名类表达式
var Polygon = class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};

  

构造函数


  类的成员需要定义在一对花括号 {} 里,花括号里的代码和花括号本身组成了类体。类成员包括类构造器和类方法(包括静态方法和实例方法)。

  class 根据 constructor 方法来创建和初始化对象。

  constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类只能有一个constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。

constructor() {}

  constructor方法默认返回实例对象(即this),完全可以指定返回另外一个对象。

'use strict';
class Foo {
  constructor() {
    return Object.create(null);
  }
}
console.log(new Foo() instanceof Foo);
运行结果:
>   
> false

  

上面代码中,constructor函数返回一个全新的对象,结果导致实例对象不是Foo类的实例。

  constructor 方法是一个特殊的类方法,它既不是静态方法也不是实例方法,它仅在实例化一个类的时候被调用。一个类只能拥有一个名为 constructor 的方法,否则会抛出 SyntaxError 异常。

严格模式

类和模块的内部,默认就是严格模式,所以不需要使用use strict指定运行模式。只要你的代码写在类或模块之中,就只有严格模式可用。

静态方法


static关键字定义了一个类的静态方法。静态方法被称为无需实例化类也可当类被实例化。静态方法通常用于为应用程序创建实用函数。

示例

'use strict';
class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }

    static distance(a, b) {
        const dx = a.x - b.x;
        const dy = a.y - b.y;

        return Math.sqrt(dx*dx + dy*dy);
    }
}

const p1 = new Point(5, 5);
const p2 = new Point(10, 10);

console.log(Point.distance(p1, p2));

  

使用 extends 关键字创建子类


extends 关键字可以用来创建继承于某个类的子类。

这个例子是根据名为Animal类创建一个名为Dog的类。

'use strict';
class Person{

  constructor(name){
  
    this.name = name;
    
  }
  
  sayName(){
  
    console.log('My name is'+this.name);
  
  }
  
}

class Tom extends Person{

  sayName(){
  
    console.log('My name is'+this.name);
  
  }
  
}

var tom = new Tom('tt');
tom.sayName();


运行结果:

>   
> My name istt

  















转载于:https://www.cnblogs.com/airycode/p/6364873.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30563917/article/details/95812602

智能推荐

回避测试方法论_weixin_33972649的博客-程序员宝宝

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

使用ParallelPeriod注意事项-31日返回空值_jzdzhiyun的博客-程序员宝宝

         如下面一个语句,查询的是2010-12-31日3个月前的那个日期,系统本应该返回的是2010-09-31,而我们知道9月份只有30没有31日的。结果系统实际最后返回给我们的是一个空值,所以碰到很多网友发现根据日期并用到了这个函数去查询结果时数据总不正确,很可能是这个潜在的问题导致的。ParallelPeriod([ABM RECORDDATE].[年-半年-季度-月-日].[The Month],3,[ABM RECORDDATE].[年-半年-季度-月-日].[The Date].&[2

电力系统潮流计算c加加语言指南,第三章简单电力系统的潮流计算汇总_工程师李涛的博客-程序员宝宝

1、第一章 简单电力系统的分析和计算一、 基本要求掌握电力线路中的电压降落和功率损耗的计算、变压器中的电压降落和功率损耗的计算;掌握辐射形网络的潮流分布计算;掌握简单环形网络的潮流分布计算;了解电力网络的简化。二、 重点内容1、 电力线路中的电压降落和功率损耗图3-1中,设线路末端电压为、末端功率为,则(1)计算电力线路中的功率损耗 线路末端导纳支路的功率损耗: (3-1)则阻抗支路末端的功率为:...

2020年天梯赛真题——L2-3 完全二叉树的层序遍历_白鹿贞松的博客-程序员宝宝

一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。输入格式:输入在第一行中给出正整数 N(≤30),即树中结点个数。第二行给出后序遍历序列,为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。输出格式:在一行中输出该树的层序遍历序列。所有数字都以 1 个空格分隔,行首尾不得有

黑马程序员--网络编程_weixin_30780221的博客-程序员宝宝

端口号的范围:0-65535,其中0-1024系统已经占用,例如:WEB端口:80;mysql端口:3306;tomcat:8080;在网络通信里,  1、传输层协议:    TCP协议,类似于打电话(下载)      1.建立连接,创建连接两端的通道(通过三次握手)      2.适合传输大数据      3.可靠地      4.由于需要建立连接,效率低...

淘宝在数据处理领域的项目及开源产品介绍_weixin_30739595的博客-程序员宝宝

淘宝在数据存储和处理领域在国内互联网公司中一直保持比较靠前的位置,而且由于电子商务领域独特的应用场景,淘宝在数据实时性和大规模计算及挖掘方面一直在国内保持着领先,因此积累了很多的实践的经验和产品。TimeTunnel基于Hbase打造的消息中间件,具有高可靠、消息顺序、事务等传统特性,还能按时间维度反复订阅最近历史的任意数据高性能的broker,单节点达2万TPS,实际支持上千长链...

随便推点

Invocation of init method failed; nested exception is org.hibernate.HibernateException: could not in..._weixin_30823683的博客-程序员宝宝

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creat...

又一位!发40篇SCI,90后博士受聘985教授_算法与数学之美的博客-程序员宝宝

最近一段时间,连续多位“90后”博导刷爆了很多人的朋友圈。从三年前引发舆论热议的学霸博导杨树、刘明侦,到前几天的刘琬璐……据不完全统计,目前国内高校和科研单位至少有10位“90后”教授。...

Delta File Fomat 2:扩展Spark读取Delta文件_wankunde的博客-程序员宝宝

文章目录DataSourceSpark 对外暴漏的读写文件的入口:writer.save() 方法DataFrameReader.load() 方法java.util.ServiceLoader扩展Spark 支持的DataSourceDataSourceDataSource 是Spark用来描述对应的数据文件格式的入口,对应的Delta也是一种数据文件格式,所以了解DataSource实现原...

TWS耳机哪个牌子音质好?2021年TWS降噪耳机推荐_kissshuma的博客-程序员宝宝

降噪耳机已经成为市场上的主流,这几年无论是出货量还是品牌覆盖度有着爆炸式的发展,价格更是从百元到上千元不等,但对于大多人而言,想要的可能只是自由无束享受无线耳机的乐趣,但太多的款式琳琅满目,所以就让我来介绍几款降噪蓝牙耳机给大家。一、NANK南卡A2推荐理由:超高性价比,自适应降噪,高音质低延迟参考价格:399Nank南卡耳机完全拿国际大牌的生产标准和工艺来生产,同一批次只挑选80%产品上市开卖,相当严苛。也因此Nank南卡蓝牙耳机品质、性能极其强悍,尤其南卡A2耳机推出后,其40dB的

echarts 自定义配置带单位的 tooltip 提示框方法 和 圆环数据 tooltip 过长超出屏幕..._weixin_33889245的博客-程序员宝宝

-------tip1--------在 tooltip 里边配置:拼接字符串;tooltip : { trigger: 'axis', formatter:function(params) {     var relVal = params[0].name; for (var i = 0, l = params.length; i...

SVN使用教程之-分支/标记 合并 subeclipse_weixin_34072637的博客-程序员宝宝

http://energykey.iteye.com/blog/512745首先说下为什么我们需要用到分支-合并。比如项目demo下有两个小组,svn下有一个trunk版。由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作【某个模块】,小组2进行新需求的开发。那么此时,我们就可以为小组2建立一个分支,分支其实就是trunk版【主...

推荐文章

热门文章

相关标签