Typescript 学习笔记四:回忆ES5 中的类
目录:
- Typescript 学习笔记一:介绍、安装、编译
- Typescript 学习笔记二:数据类型
- Typescript 学习笔记三:函数
- Typescript 学习笔记四:回忆Es5 中的类
- Typescript 学习笔记五:类
- Typescript 学习笔记六:接口
- Typescript 学习笔记七:泛型
最简单的类
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 中的类的更多相关文章
- Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理
原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...
- CodeIgniter学习笔记四:CI中的URL相关函数,路由,伪静态,去掉index.php
一.URL相关函数 1.加载url模块 加载url有两种方式: a.自动加载:在 application/config/autoload.php 中开启 $autoload['helper'] = a ...
- python 学习笔记(四) 统计序列中元素出现的频度(即次数)
案例一:在某随机序例中,找到出现频度最高的3个元素,它们出现的次数是多少? from random import randint # 利用列表解析器生成随机序列,包含有30个元素 data = [ra ...
- Android(java)学习笔记79:java中InetAddress类概述和使用
要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机. 在TCP/IP协议中,这个标识号就是IP地址. 那么,我们如果获取和操作I ...
- Android(java)学习笔记19:Java中InetAddress类概述和使用
1. 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机. 在TCP/IP协议中,这个标识号就是IP地址. 那么,我们如果获取和 ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记六:接口
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记二:数据类型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- Sqlite安装教程
Sqlite下载页面:http://www.sqlite.org/download.html Windows安装 需要下载 sqlite-tools-win32-*.zip 和 sqlite-dll- ...
- Linux命令行报错 bash: cannot create temp file for here-document: No space left on device
今天Linux服务器出问题了,使用"tab"补全命令时,提示 bash: cannot create temp file for here-document: No space l ...
- js 加减乘除失精
js 计算失精是因为js 先将10十进制代码转化为2进制,再计算导致 具体解决方案: 1. 加 function accAdd(arg1,arg2){ var r1,r2,m; ].length}} ...
- JAVA初学者的JDB 尝试
使用JDB调试简单递归程序 跟着娄老师的博客学习, 首先在终端使用Ctrl+Shift+T打开三个标签,方便操作. 使用Vim编辑自己的程序,练习程序如下 1 public class Factori ...
- MySQL开发——【多表关系、引擎、外键、三范式】
多表关系 一对一关系 一对多或多对一关系 多对多关系 MySQL引擎 所谓的MySQL引擎就是数据的存储方式,常用的数据库引擎有以下几种: Myisam与InnoDB引擎之间的区别(面试) ①批量插入 ...
- POJ 1655.Balancing Act 树形dp 树的重心
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14550 Accepted: 6173 De ...
- magento中Model创建以及该Model对于数据库的增删改查
本文是按照magento英文文档照做与翻译的. Model层的实现是mvc框架的一个巨大的部分.它代表了你的应用的数据,或者说大多数应用没有数据是无用的.Magento的Model扮演着一个重要的角色 ...
- 查找 管道 exec
#查找150天为使用的文件并列出find -type f -mtime +150 -exec ls -ltr {} \;#查找150天内120外的文件find -type f -mtime -150 ...
- ABP 权限拦截 第二篇
由于访问人数过多,我今天从新整理一下ABP权限认证机制,帮助大家更容易读懂 1.Abp 的权限拦截主要通过过滤器, public class AbpAuthorizationFilter : I ...
- eclipse里maven项目An error occurred while filtering resources解决办法
在使用eclipse构建maven项目时,突然出现错误提示:An error occurred while filtering resources,在项目中到处都找不到哪里有问题,最后在国外网站找到解 ...