中文网:https://www.tslang.cn/

官网:http://www.typescriptlang.org/

目录:

最简单的类

function Person (name, age) { // 构造函数
this.name = name; // 属性
this.age = age;
}
var p = new Person('张三', 25); // 实例化对象,p 为 Person 的一个实例
console.log(p.name);

函数名首字母大写,函数内用 this 处理的函数称为构造函数。

用 new 关键字实例化构造函数的变量是该构造函数的实例。

类定义属性和方法

可以在构造函数和原型链上定义属性和方法。

function Person (name, age) {
// 构造函数内定义属性和方法
this.name = name; // 实例属性
this.age = age; this.run = function () { // 实例方法
console.log(this.name + '在运动');
}
}
// 原型链上定义属性和方法
Person.prototype.sex = '男';
Person.prototype.work = function () {
console.log(this.name + '在工作');
} var p = new Person('张三', 25);
p.run(); // 调用实例方法
p.work();

原型链上面的属性会被多个实例共享,构造函数里的属性不会

类的静态属性和方法

直接给构造函数设置属性和方法,不需要实例化即可获得的。

构造函数内的属性和方法,原型链上的属性和方法都需要实例化之后才可获得。

function Person (name, age) {
// 构造函数内定义属性和方法
this.name = name; // 属性
this.age = age; this.run = function () { // 方法
console.log(this.name + '在运动');
}
} // 静态属性、方法
Person.address = 'xxx';
Person.getInfo = function () {
console.log('静态方法');
}
// 调用
console.log(Person.address);
Person.getInfo();
Person.run(); // 错误,只有实例对象才可调用 var p = new Person();
p.run();

继承:对象冒充实现

对象冒充可以继承构造函数里面的属性和方法,但是没法继承原型链上面的属性和方法

// 父类
function Person (name, age) {
this.name = name;
this.age = age; this.run = function () {
console.log(this.name + '在运动');
}
}
Person.prototype.sex = '男';
Person.prototype.work = function () {
console.log(this.name + '在工作');
} // 子类继承父类
function Child () {
Person.call(this); // 对象冒充实现继承
} var c = new Child('张三', 25);
c.run();
c.work(); // 错误,没有 work 方法

继承:原型链实现

原型链继承:可以继承构造函数里面的属性和方法,也可以继承原型链上面的属性和方法。但是实例化子类的时候没法给父类传参。

// 父类
function Person (name, age) {
this.name = name;
this.age = age; this.run = function () {
console.log(this.name + '在运动');
}
}
Person.prototype.sex = '男';
Person.prototype.work = function () {
console.log(this.name + '在工作');
} // 子类继承父类
function Child (name, age) { }
Child.prototype = new Person(); // 原型链实现继承 var c = new Child('张三', 25);
c.run(); // undefined 在运动
c.work(); // undefined 在工作

继承:原型链+对象冒充的组合继承模式

原型链继承:可以继承构造函数里面的属性和方法,也可以继承原型链上面的属性和方法。但是实例化子类的时候没法给父类传参。

// 父类
function Person (name, age) {
this.name = name;
this.age = age; this.run = function () {
console.log(this.name + '在运动');
}
}
Person.prototype.sex = '男';
Person.prototype.work = function () {
console.log(this.name + '在工作');
} // 子类继承父类
function Child (name, age) {
Person.call(this, name, age); // 对象冒充继承,实例化子类可以给父类传参
}
Child.prototype = new Person(); // 原型链实现继承,继承原型链上的属性和方法
// 或者
// Child.prototype = Person.prototype; // 原型链实现继承,继承原型链上的属性和方法 var c = new Child('张三', 25);
c.run(); // 张三在运动
c.work(); // 张三在工作

Typescript 学习笔记四:回忆ES5 中的类的更多相关文章

  1. Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理

    原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...

  2. CodeIgniter学习笔记四:CI中的URL相关函数,路由,伪静态,去掉index.php

    一.URL相关函数 1.加载url模块 加载url有两种方式: a.自动加载:在 application/config/autoload.php 中开启 $autoload['helper'] = a ...

  3. python 学习笔记(四) 统计序列中元素出现的频度(即次数)

    案例一:在某随机序例中,找到出现频度最高的3个元素,它们出现的次数是多少? from random import randint # 利用列表解析器生成随机序列,包含有30个元素 data = [ra ...

  4. Android(java)学习笔记79:java中InetAddress类概述和使用

    要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机. 在TCP/IP协议中,这个标识号就是IP地址. 那么,我们如果获取和操作I ...

  5. Android(java)学习笔记19:Java中InetAddress类概述和使用

    1. 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机. 在TCP/IP协议中,这个标识号就是IP地址. 那么,我们如果获取和 ...

  6. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  7. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  8. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  9. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结

    MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...

  2. ArcGIS自定义脚本-通过txt/excel/dbf/table生成多边形要素类

    ArcGIS自定义脚本-通过txt/excel/dbf/table生成多边形要素类 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:读取文本文件,常见多边形要素 ...

  3. 浅析AnyCast网络技术

    什么是BGP AnyCast? BGP anycast就是利用一个(多个) as号码在不同的地区广播相同的一个ip段.利用bgp的寻路原则,短的as path 会选成最优路径(bgp寻路原则之n),从 ...

  4. [leetcode]156.Binary Tree Upside Down颠倒二叉树

    Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that ...

  5. 在WIN10上安装ESXI-Comstomer (转自技术社区)

    I recently required the use of ESXi Customizer to integrate some NIC drivers into my ESXi 5.5 ISO. H ...

  6. Linux驱动之定时器在按键去抖中的应用

    机械按键在按下的过程中会出现抖动的情况,如下图,这样就会导致本来按下一次按键的过程会出现多次中断,导致判断出错.在按键驱动程序中我们可以这么做: 在按键驱动程序中我们可以这么做来取消按键抖动的影响:当 ...

  7. Zookeeper 集群配置及启动

    准备工作 1. 集群机器 192.168.8.2 192.168.8.6 192.168.8.11 2. 包 zookeeper-3.4.10.tar.gz 集群配置 1. 解压路径 192.168. ...

  8. RNA提取和建库流程对mRNA-Seq的影响

    RNA提取和建库流程对mRNA-Seq的影响 已有 10460 次阅读 2014-8-14 14:21 |个人分类:转录组测序|系统分类:科研笔记|关键词:转录组测序,RNA-Seq,,链特异性RNA ...

  9. python datetime模块用法

    1. 创建naive(无时区信息)的datetime对象 import datetime dt_utc = datetime.datetime.utcnow() dt_utc # datetime.d ...

  10. SQLite3命令操作大全

    SQLite3命令操作大全 SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.ql ...