1 js原型链是一个绕不开的话题。直接上说吧。

/**
* 1. js里的原型链是怎么样的? 带class 和不带class的原型链的不同。
*/ const util = require('util');
function A() {
console.info("I am A ");
} function B() {
console.info("I am B ");
} function C() {
console.info("I am C ");
} util.inherits(B, A);
util.inherits(C, B);
class CA {
constructor(){
console.info("i am CA");
} doCA(){
console.info(" doCA ");
}
} class CB extends CA{
constructor(){
super();
console.info("i am CB");
} doCB(){
console.info(" do CB ");
}
} class CC extends CB {
constructor(){
super();
console.info("i am CC");
} doCC(){
console.info(" i am doCC");
}
} //原型链继承如下:
var c = new C();
console.info( c.__proto__ === C.prototype);
console.info(c.__proto__.__proto__ === B.prototype);
console.info(c.__proto__.__proto__.__proto__ === A.prototype);
console.info(c.__proto__.__proto__.__proto__.__proto__ === Object.prototype);
console.info(c.__proto__.__proto__.__proto__.__proto__.__proto__ === null); //class
var cc = new CC();
console.info(cc.__proto__ === CC.prototype);
console.info(cc.__proto__.__proto__ === CB.prototype);
console.info(cc.__proto__.__proto__.__proto__ === CA.prototype);
console.info(cc.__proto__.__proto__.__proto__.__proto__ === Object.prototype);
console.info(cc.__proto__.__proto__.__proto__.__proto__.__proto__ === null); //下面是类的继承关系。class和非class是不同的
console.info("类继承关系");
console.info(C.prototype.constructor === C);//C的原型的构造 = 本身
console.info(C.__proto__ === Function.prototype);//所有的类的__proto__指向Function的原型,即构造主的原型。
console.info(Function.__proto__ === Function.prototype);// console.info("带class的类继承关系");
console.info(CC.__proto__ === CB);//带class 的CC的__proto__指向,cb, 最终最想 Function的原型。
console.info(CC.__proto__.__proto__ === CA);
console.info(CA.__proto__ === Function.prototype);

原型链要记住一下几点:

1. 每个东西都有 __proto__

2. 类的prototype = 类的原型。 类的原型的 construct = 类。

3. 小c的__proto__ = C的原型,C的原型的__proto__= B的原型, B的原型的__proto__ = A的原型 , A的原型的 __proto__ = Object的原型,Object的原型的__proto__ = null;这就是原型链,很简单吧。

4. 用class 继承时, CC的__proto__ = CB, CB的__proto__ = CA, CA的__proto__ = Function的原型。

用util.inherits 实现继承时, C,B,A, Function的__proto__ 都等于 Function的原型。

只要把上面都记住,多练习,就可以很好的掌握原型链。

以上如果还没有看懂的话,可以参考:https://blog.csdn.net/m0_37589327/article/details/78655038

02 js原型链的更多相关文章

  1. JS原型链

    JS作为发展了多年了对象语言,支持继承,和完全面向对象语言不同的是,JS依赖原型链来实现对象的继承. 首先JS的对象分两大类,函数对象和普通对象,每个对象均内置__proto__属性,在不人为赋值__ ...

  2. 深入分析JS原型链以及为什么不能在原型链上使用对象

    在刚刚接触JS原型链的时候都会接触到一个熟悉的名词:prototype:如果你曾经深入过prototype,你会接触到另一个名词:__proto__(注意:两边各有两条下划线,不是一条).以下将会围绕 ...

  3. js原型链与继承(初体验)

    js原型链与继承是js中的重点,所以我们通过以下三个例子来进行详细的讲解. 首先定义一个对象obj,该对象的原型为obj._proto_,我们可以用ES5中的getPrototypeOf这一方法来查询 ...

  4. JS 原型链图形详解

    JS原型链 这篇文章是「深入ECMA-262-3」系列的一个概览和摘要.每个部分都包含了对应章节的链接,所以你可以阅读它们以便对其有更深的理解. 对象 ECMAScript做为一个高度抽象的面向对象语 ...

  5. 深入理解JS原型链与继承

    我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...

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

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

  7. 一张图看懂 JS 原型链

    JS 原型链,画了张图,终于理清楚各种关系有木有 写在最后: __proto__是每个对象都有的一个属性,而prototype是函数才会有的属性!!! function Person() { } 是函 ...

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

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

  9. JS原型链与继承别再被问倒了

    原文:详解JS原型链与继承 摘自JavaScript高级程序设计: 继承是OO语言中的一个最为人津津乐道的概念.许多OO语言都支持两种继承方式: 接口继承 和 实现继承 .接口继承只继承方法签名,而实 ...

随机推荐

  1. 一次Python操作数据库和excel过程

    师从‘百测’besttest 最近牛大湿教了操作数据库和操作excel,写了一个小小的脚本,传入一个表名后,将表中所有数据写入excel中. 使用了pymysql,xlwt,需要自行安装. impor ...

  2. IDEA配置Hystrix过程中报错: java.lang.IllegalStateException: No instances available for user-service

    最近在练习微服务架构中, 使用IDEA配置完Hystrix, 添加熔断方法后, 在浏览器中访问未启动的( 含有熔断方法注解 )的路径时, 报出了 : 500: No instances availab ...

  3. ABC技术落地_成功带动lot物联网行业、金融科技行业、智能人才教育。

    ABC技术:AI:Python神经网络和自然语言处理(NLP):C ++ 机器学习和神经网络:Java自然语言处理.搜索算法.神经网络:Lisp归纳逻辑项目和机器学习.Big Date:R.Pytho ...

  4. 《精通并发与Netty》学习笔记(12 - 详解NIO (三) SocketChannel、Pipe)

    一.SocketChannelJava NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel ...

  5. npm run build 报错 Error: No PostCSS Config found in...

    module.exports = { plugins: [ require('autoprefixer')//自动添加css前缀 ] }; 在项目根目录新建postcss.config.js文件,添加 ...

  6. POJ3311 Hie with the Pie 【状压dp/TSP问题】

    题目链接:http://poj.org/problem?id=3311 Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total ...

  7. centOS服务器-firewall防火墙开放端口

    前言 日常开发中,我们常常会因为服务器各种端口未开放出现各种问题,下面我们就来简单了解下服务器上的端口开放!!! 作为一个后台开发,日常接触最多的除了代码就是服务器了: 产品:谁谁, 线上有个功能报错 ...

  8. HDU 4578 线段树玄学算法?

    Transformation 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4578 Problem Description Yuanfang is p ...

  9. 剑指offer45:扑克牌顺子

    1 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话, ...

  10. spark异常篇-关闭程序

    在运行 spark 程序时,出于某种原因,我想停止运行,狂按 ctrl+c 不一定起作用 以下两种情况是不好关闭的 1. cluster 运行模式 2. SparkStreaming 程序 本文旨在收 ...