中文网: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. 本学期c#学习总结

    本学期c#学习总结 时间转瞬即逝,大一上半学期的学习生涯已经结束.虽然以前我没什么关于学习计算机的基础,但是经过了这几个月的学习我也还是有点收获的. 我发现c#语言的关键词有很多语言特性和固定的用法, ...

  2. thinkphp用ajax遇到的坑——ajax请求没有反应

    view视图的 html 的 js 代码如下, $.ajax({             url:"test",//这里指向的就不再是页面了,而是一个方法.             ...

  3. Linux下安装Hadoop

    第一步: Hadoop需要JAVA的支持,所以需要先安装JAVA 查看是否已安装JAVA 查看命令: java -version JRE(Java Runtime Environment),它是你运行 ...

  4. c# sshnet控制linux 使用unzip的一些问题

    无法使用unzip 解压缩 linux文件夹下的zip文件 于是想在win下生成一个 shell 文件传到linux 下运行,结果这个sh文件在linux  运行时出错,同样的文件在linux下生成就 ...

  5. RNA-seq差异表达基因分析之TopHat篇

    RNA-seq差异表达基因分析之TopHat篇 发表于2012 年 10 月 23 日 TopHat是基于Bowtie的将RNA-Seq数据mapping到参考基因组上,从而鉴定可变剪切(exon-e ...

  6. 线程属性 pthread_attr_t

    参考资料: https://blog.csdn.net/hudashi/article/details/7709413 Posix线程中的线程属性pthread_attr_t主要包括scope属性.d ...

  7. [SoapUI] 检查测试步骤的类型或者或者某种特定类型的步骤列表

    SoapUI Groovy : Check if test step is of specific type, such as : Wsdl, Rest, Jdbc, HTTP, Groovy etc ...

  8. Spring 系列目录

    Spring(https://spring.io/) 系列目录 第一篇:Spring 系列 第一章 Spring Core (1) Convert 1.1.1 Spring ConversionSer ...

  9. python datetime模块用法

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

  10. Apache ab性能测试结果分析

    Apache ab性能测试结果分析 测试场景:模拟10个用户,对某页发起总共100次请求. 测试命令: ab -n 100 -c 10 地址 测试报告: Server Software: 被测服务器软 ...