话不多说先来段代码

class Parent {
private name:string;
constructor(name) {
this.name = name;
} public getName():string {
return this.name;
} public setName(name:string):void {
this.name = name;
} sayHi() {
return `Parent name is ${this.name}`;
}
} class Child extends Parent {
constructor(name) {
super(name);
} sayHi() {
return `Child call Parent' sayHi() to show parent name is ${super.getName()}`;
}
} const xiaoxu = new Child('xiaoxu');
console.log(xiaoxu.sayHi());
var __extends = (this && this.__extends) || (function() {
var 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 function(d, b) {
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype,
new __());
}
;
}
)();
var Parent = /** @class */
(function() {
function Parent(name) {
this.name = name;
}
Parent.prototype.getName = function() {
return this.name;
}
;
Parent.prototype.setName = function(name) {
this.name = name;
}
;
Parent.prototype.sayHi = function() {
return "Parent name is " + this.name;
}
;
return Parent;
}());
var Child = /** @class */
(function(_super) {
__extends(Child, _super);
function Child(name) {
return _super.call(this, name) || this;
}
Child.prototype.sayHi = function() {
return "Child call Parent' sayHi() to show parent name is " + _super.prototype.getName.call(this);
}
;
return Child;
}(Parent));
var xiaoxu = new Child('xiaoxu');
console.log(xiaoxu.sayHi());
var __extends = this && this.__extends;
var extendsFn = function() {
var extenStatics = Object.setPrototypeOf; }
__extends = __extends || // 这句其实比较有意思
{__proto__: []} instanceof Array && function ss(){} // 首先我们知道如果var a = new A(), 那么a.__proto__ = A.prototype 而A.prototype.__proto__ = Object.prototype
//所以假设var a = {__proto__: []},那么也就意味着a.__proto__ = []
// 再说下instanceof,我们先写一个伪instanceof
// 所以[].__proto__ = Array.prototype 当然所以可以理解为a是[]的子类,是Array的子子类。
// 其实这段话的意思就是来判断当前环境是否支持__proto__作为隐式链接来进行原型链查找,其实是一种环境检测的方法,非常赞。 // 这样d.__proto = b,使得d可以引用b上的属性,即静态变量 // A instanceof B === fakeInstanceof(A, B)
function fakseInstanceof(a, b) {
var L = a.__proto__
var M = b.prototype
if(L === M) {
return true;
} else {
return false;
}
} // 更帅的一段来了
function __() {
this.constructor = d;
} d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, d = new __()) // 傻眼了吧,这里__就是一个桥梁,因为d = new __()所以d.__proto__ = __.prototype, 又因为__.prototype = b.prototype,
// 这样我们就可以在d和b之间形成原型链,且将隔离性做到很好
// 别忘记d = new __()会改变constructor,这里我们用this.constructor很好的结局了。
// ??这里是否有效率提升,参考anujs的解释。

从Typescript看原型链的更多相关文章

  1. 简单粗暴地理解js原型链--js面向对象编程

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  2. 简单粗暴地理解 JavaScript 原型链 (一个充满歪门邪理的理解方法,有助于新手哦!)

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  3. 好文要顶之 --- 简单粗暴地理解 JavaScript 原型链

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  4. JS 原型链学习总结

    废话篇: 在js的学习过程中有一大难点就是原型链.学习的时候一直对这一内容不是十分的明白.纠结的我简直难受.,幸好总算给他弄通了,哇咔咔,总算可以不用在睡梦中还想着他了. 正文篇: 要了解原型链我们首 ...

  5. 谈谈我对 js原型链的理解

    想要学习 “原型链” 必须要认识什么是 “原型” 和 “原型链” 先理解一下普通的继承和原型的区别,下面写一段js代码来帮助理解: var Animal = function(){ // 动物抽象类 ...

  6. js 原型链和继承(转)

    在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的 new 到底是干什么的 1. 什么是 JS 原型链? 我们知道 JS 有对象,比如 var ob ...

  7. 转自知乎大神---什么是 JS 原型链?

    我们知道 JS 有对象,比如 var obj = { name: 'obj' } 我们可以对 obj 进行一些操作,包括 「读」属性 「新增」属性 「更新」属性 「删除」属性 下面我们主要来看一下「读 ...

  8. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  9. 【nodejs原理&源码赏析(3)】欣赏手术级的原型链加工艺术

    目录 一. 概述 二. 原型链基础知识 三. Worker类的原型链加工 四. 实例的生成 五. 最后一个问题 六. 一些心得 示例代码托管在:http://www.github.com/dashno ...

随机推荐

  1. Java8自定义函数式编程接口和便捷的引用类的构造器及方法

    什么是函数编程接口? 约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equal),不算是函数式接口的方法. 被@FunctionalInterfa ...

  2. cs架构与bs架构的对比

    主要区别: Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的. 1.硬件环境不同 C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网 ...

  3. Mongodb 的ORM框架 Morphia之注解

    @Entity("bands") public class Band { @Id ObjectId id; String name; String genre; @Referenc ...

  4. PhoenixFD插件流体模拟——UI布局【Output】详解

    Liquid Output 流体输出  本文主要讲解Output折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Outp ...

  5. python之集合及其方法---整理集

    集合的定义: 由不同元素组成.一组无序排列的可hash值.集合中元素必须是不可变类型 集合的定义方式: 由大括号组成: 每个元素用逗号分隔: 元素书写不是key-value形式: 集合是由不同元素组成 ...

  6. vscode 好用插件

    1.查询文件路径../../有提示:  Path Intellisense 2.require 时的包提示(最新版的vscode已经集成此功能) : Npm Intellisense 3.自动帮你完成 ...

  7. js计算日期相减天数

    代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head ...

  8. 【scarletthln 关于算法的一点总结】

    1. 分解问题的角度: fix 某一维度,尝试另一维度上的所有可能   a. 可能是array的(i, j)pointers, b. 可能是矩形的长与宽, c. 可能是tree的每一个subtree, ...

  9. iOS多图上传

    iOS多图上传涉及到多线程问题,个人比较喜欢使用GCD操作,下边是最近写的一个多图上传代码,附带相关注释 __block BOOL allSucc = YES; __block int m = 0; ...

  10. PIL库学习及运用

    了解PIL以及安装. 个方面的功能: (1) 图像归档:对图像进行批处理.生产图像预览.图像格式转换等. (2) 图像处理:图像基本处理.像素处理.颜色处理等. 安装PIL在cmd中输入 pip in ...