ts中是这样的

class Greeter {
greeting:string;
constructor(message:string){
this.greeting = message;
}
greet(){
console.log("Hello," + this.greeting)
}
} let greeter = new Greeter("world") class Dog extends Greeter{
bark() {
console.log('Woof! Woof!');
}
}
let dog = new Dog('123')
dog.bark()
dog.greet()

经过tsc test.ts编译成ES5的源码如下,可在对应生成的test.js中查看

var __extends = (this && this.__extends) || (function () {//(this && this.__extends) 有this且已有该函数则不执行后面的函数
var extendStatics = function (d, b) {
// 从这个函数的名字就可以看到它是实现静态的属性的继承的
// 静态属性就是直接绑定在构造函数这个函数对象上的属性
// function (d, b) { d.__proto__ = b; } 将b对象设置为d对象的原型
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
// 上面这种是兼容老版本浏览器的拷贝继承
return extendStatics(d, b);
// {__proto__: []} instanceof Array用来判断浏览器是否支持__proto__属性
// instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置
// b.prototype 是否存在于d的原型链上
// {} 空的对象的__proto__属性设为空数组,Array 是[]的原型链上的,所以返回true
};
return function (d, b) {
extendStatics(d, b);//完成静态属性继承
function __() { this.constructor = d; }//新构造函数,将constructor指向d
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
//如果b 是null 即空对象,则d的prototype 等于Object.create(b),即初始化一个新对象
//v8上直接{}创建对象比Object.create(null)快
//否则,采用原型继承,__的prototype 等会 b 的
};
})();
var Greeter = /** @class */ (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
console.log("Hello," + this.greeting);
};
return Greeter;
}());
var greeter = new Greeter("world");
var Dog = /** @class */ (function (_super) {
__extends(Dog, _super);
function Dog() {
return _super !== null && _super.apply(this, arguments) || this;
}
Dog.prototype.bark = function () {
console.log('Woof! Woof!');
};
return Dog;
}(Greeter));
var dog = new Dog('123');
dog.bark();
dog.greet();

总结:理解起来还是挺费劲的,或者说到现在都没完全理解,面向对象、原型链这一块容易忘记,当然,还是理解的不够深刻,不然很难忘掉的。

ES5 实现 ES6 的 class以及extends的更多相关文章

  1. React入门 (1)—使用指南(包括ES5和ES6对比)

    前言 本篇会简明扼要的介绍一下React的使用方法.代码会用JSX+ES5和JSX+ES6两种方式实现. React简介 React来自Facebook,于2013年开源.至今不断修改完善,现在已经到 ...

  2. ES5和ES6中对于继承的实现方法

    在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...

  3. ES5 vs ES6

    ES5中 var React = require('react-native'); ES6中 import React from 'react-native'; .babelrc文件中添加一下内容 { ...

  4. JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)

    多态(Polymorphism)按字面的意思就是"多种状态",同样的行为(方法)在不同对象上有不同的状态. 在OOP中很多地方都要用到多态的特性,比如同样是点击鼠标右键,点击快捷方 ...

  5. JavaScript、ES5和ES6的介绍和区别

    JavaScript由三部分组成: ECMAScript(核心) DOM(文档对象模型) BOM (浏览器对象模型) ES5(ECMAScript第五个版本) strict模式 严格模式,限制一些用法 ...

  6. ES5和ES6那些你必须知道的事儿(三)

    ES5和ES6那些你必须知道的事儿 ES6新增的东西 一.块级作用域:关键字let,常量const let与var的区别: a.不会进行变量声明提升 b.变量不允许被重复定义 c.变量不允许被删除 d ...

  7. ES5与ES6的小差异

    ES5与ES6的小差异 变量的定义 ES6与ES5的区别 ES5: <script> console.log(username); var username; var username = ...

  8. React Native的语法之ES5和ES6

    原文地址:http://www.devio.org/2016/08/11/React-Native%E4%B9%8BReact%E9%80%9F%E5%AD%A6%E6%95%99%E7%A8%8B- ...

  9. 多角度对比 ES5与ES6的区别

    ES5与ES6的对比不同点整理 本文关键词:ES6,javascript, 1.Default Parameters(默认参数) es6之前,定义默认参数的方法是在一个方法内部定义 var link ...

随机推荐

  1. c++中%是什么意思?

    两种意思:1.格式化字符串输出2.整数取余 1.目前printf支持以下格式的输出,例如:printf("%c",a):输出单个字符.printf("%d",a ...

  2. 【Udacity】解决:字幕遮挡视频内容怎么办?Udacity字幕大小调整

    字幕有没有办法显示在最下方,否则把内容挡住了,根本看不清老师所指的内容 Chrome 的小插件,能方便地调节视频的字幕大小,譬如:Udacity 的学习视频字幕大小不能调节,有时候不想它占太多位置,而 ...

  3. 微信小程序——小程序的能力

    小程序启动 通过app.json里pages字段可以获得页面路径,而写在 pages 字段的第一个页面就是这个小程序的首页(打开小程序看到的第一个页面),就像下面的代码中,小程序启动后的第一个页面就是 ...

  4. Connection Manager ->> Multiple Flat File Connection & Multiple File Connection

    遍历一个文件夹下的所有文件的方法有两钟:1)使用Multiple Flat File Connection,把所有我们要的文件用"|"作为连接符拼凑出一条connection st ...

  5. mongodb 3.4复制搭建

    mongodb数据库主从复制的原理:在主从结构中,主节点的操作记录称为oplog(operation log).oplog存储在一个系统数据库local的集合oplog.$main中,这个集合的每个文 ...

  6. mongodb数据库备份恢复-windows系统

    备份语法: mongodump命令脚本语法如下: >mongodump -h dbhost -d dbname -o dbdirectory -h: MongDB所在服务器地址,例如:127.0 ...

  7. urlx

    2015-09-24 23:41:26 centos6.6下安装MongoDB3.0.1 https://www.percona.com/doc/percona-tokumx/installation ...

  8. 你所不知道的C和C++运行库 标签: vc 2017-05-26 10:33 41人阅读 评论(0) 收藏

    在使用vs2013调用vc2005编译出的dll时出现错误,遂将源程序用vs2013编译出dll,再用vs2013调用错误消失,不解.寻找原因时有人说"VC库版本不一样",故查找C ...

  9. java 开发常用IDE

    1.IntelliJ IDEA 2.eclipse 3.netbeans 这三个IDE都不错,据说IntelliJ IDEA最好,主要还是看个人喜好和需要.

  10. note05-计算机网络

    5.网络安全 被动攻击(UDP报文被截获 被 进行流量分析) 主动攻击 1.篡改(更改报文流 伪报文) 2.恶意程序(病毒.木马.蠕虫.炸弹) 3.拒绝服务Dos 密码体制 1.对称密钥密码体制(DE ...