浅谈JavaScript原型链

量化交易新手必看:如何用Python快速接入XTP极速交易系统(附避坑指南) 本文为量化交易新手提供了使用Python快速接入中泰证券XTP极速交易系统的完整指南。文章详细介绍了XTP系统的微秒级性能优势、与CTP系统的核心区别,并逐步讲解了环境配置、API连接、资金查询、下单撤单等关键步骤,同时分享了网络维护、订单处理等实战避坑技巧,帮助开发者高效对接专业交易柜台。 阅读详情

先来看一下,构造函数----实例----原型三者之间的关系

JavaScript怎么实现继承?

1.经典继承

    var o = {
        name:"张三",
        age:"18"
    };
    var obj = Object.create(o);
    console.log(obj.name,obj.age);

结果

 

2.混入式继承

    var obj1 = {
        name:"张三",
        age:"18"
    };
    var obj2 = {};
    for(var k in obj1){
        obj2[k] = obj1[k];
    }
    console.log(obj1);
    console.log(obj2);

结果

3.使用原型继承

    function obj() {

    }
    obj.prototype.name = "张三";
    obj.prototype.age = "18";

    var obj1 = new obj();
    var obj2 = new obj();

    console.log("obj1:",obj1);
    console.log("obj2:",obj2);

结果

 

如何扩展或者修改一个内置对象?

Array.prototype.fn = function () {
      console.log("我是一个数组");  
    };

Array.prototype.push = function () {
      console.log("push没有咯");
    };

这种方式怕是不太合理哦,万一别人也想加一个fn方法啊,你把push改了别人要用怎么办?

我们选择利用原型的特性

    function MyArray() {

    }
    //创建一个Array实例
    var arr = new Array();
    //改变原型指向
    MyArray.prototype = arr;
    MyArray.prototype.fn = function () {
        console.log("我是一个数组");
    };
    MyArray.prototype.reverse = function () {
        console.log("reverse方法改变咯");
    };
    var a = new MyArray();
    a.push(1,2,3,4);
    a.fn();
    a.reverse();

    var b = new Array(1,2,3,4);
    try{
        b.fn();
    }catch (e){
        console.log("b没有这个方法");
    }
    b.reverse();
    console.log("a:",a);
    console.log("b",b);

结果

我们发现MyArray的实例能用自己定义的fn函数,能改变原来Array的方法,还能用Array的方法如同一个数组

而Array并没有受到上面改变的影响

来看看MyArray改变原型后,.prototype的值和它的constructor值

    console.log(MyArray.prototype);
    console.log(MyArray.prototype.constructor);

结果

我们发现.prototype中有自己添加的fn方法和重写的reverse方法,而我们没有自己添加constructor属性,系统直接通过__proto__找到了Array的原型中的constructor的构造函数,也就是MyArray直接用的Array的构造函数

为什么Array没有被上面的方法重写?

因为是直接在MyArray的prototype中添加的,根本没有Array.prototype的事

为什么MyArray能用Array原型中的方法?

如果MyArray中没有这个方法就会通过__proto__找到原型中arr属性(Array的实例对象)再通过__proto__在它的原型中寻找方法,然后一直向下,形成了原型链

看图说明

什么是原型链?

1.每个构造函数都有原型对象

2.每个对象都会有构造函数

3.每个构造函数的原型都是一个对象,那么这个原型对象也会有构造函数,那么这个原型对象的构造函数也会有原型对象

4.这样就会形成一个链式的结构,称为原型链

 

画一个简单的原型链来解释

这是一个最基本的原型链,可以理解为:

a--->A.prototype--->Object.prototype--->null

a中没有的属性会去A的原型中找,如果还是没有就是它的上级Object的原型中找,还是没有就报错

规则:

1.访问对象的成员时,会先去自身查找,找到就使用

2.没有找到,去当前对象的原型中查找,找到就使用

3.没有找到,继续像这个对象的原型的构造函数的原型中查找(向上继续找),找到就使用

4.如果最后到Object的原型都没有找到,就直接报错

 

一个实例对象一共会继承多少成员:

 

构造函数是怎么来的?

    function A1(name) {
        this.name = name;
    }

    var A2 = new Function("name","this.name = name;");

    var a1 = new A1("张三");
    var a2 = new A2("张三");
    console.log("a1:",a1.name);
    console.log(A1);
    console.log("a2:",a2.name);
    console.log(A2);

结果

我们发现可以通过new Function创建出来一个函数,所以A1构造函数也是一个实例对象由Function函数创建

 

1.那么Function的构造函数是谁 ?

console.log(Function.constructor);

结果

自己把自己给创建出来了 

 

2.来看看Function的原型是谁?

console.log(Function.prototype);

结果

 

3.再来看看Function的原型的原型是谁 

console.log(Function.prototype.__proto__);
console.log(Function.prototype.__proto__.constructor);

结果

Function的原型的原型的构造函数是Object,所以Function的原型的原型是Object的原型,再往上Object的原型就是null了

 

4.那这个Object的构造函数又是谁?

console.log(Object.constructor);

结果

居然还是Function

 

由上可知

1.构造函数由Function创建

2.Function的构造函数就是自己本身

3.Function的原型是一个空的函数

4.Function的原型的原型是Object的原型

5.Object是Function创建

 

更新原型链图

有点乱,整理一下

再换一种画法

结论:

1. Object构造函数是通过Function构造函数创建的

2.Function构造函数是自己把自己创建的

 

来看一个槽点

console.log(Function.constructor);
console.log(Object.constructor);

结果

这个结果就是我们上面那个结论,介绍一个运算符instanceof

instanceof运算符希望左操作数是一个对象,右操作数标识对象的类。如果左侧对象是右侧类的实例,则表达式返回为true,否则返回false

看下面的代码

console.log(Function instanceof Function);
console.log(Function instanceof Object);

结果

Function不是Function自己创建吗?

Function也是Object的实例?

Object不是Function创建的吗?

Object也创建了Function?

再来看看这个

console.log(Object instanceof Function);
console.log(Object instanceof Object);

结果

真是越来越奇怪了,互相创建??

换个例子看下

    function A(name) {
        this.name = name;
    }
    var a = new A("张三");
    console.log(a instanceof A);
    console.log(a instanceof Object);
    console.log(a instanceof Function);

    console.log(A instanceof Function);
    console.log(A instanceof Object);

结果

怎么会出现这种情况?还是得提一下instanceof的判断机制,并不是就是光判断a是不是A的实例,而是可以理解为

a.__proto__.__proto__.... =  A.prototype

instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型

举例说明一下

    function A(name) {
        this.name = name;
    }
    var a = new A("张三");

    console.log(a instanceof A);
    console.log(a.__proto__ === A.prototype);

    console.log(a instanceof Object);
    console.log(a.__proto__.__proto__ === Object.prototype);

    console.log(a instanceof Function);
    //这个玩意,并没有a再__proto__下去就是null了

    console.log(A instanceof Function);
    console.log(A.__proto__ === Function.prototype);

    console.log(A instanceof Object);
    console.log(A.__proto__.__proto__ === Object.prototype);

结果

 

没有懂就结合上面的原型链图再看一下

 

我们回到原点,看那四句的输出为什么会是true

先附上图解

两条原型链

Function-->Function.prototype-->Object.prototype-->null

Object-->Function.prototype-->Object.prototype-->null

解释那四句

    console.log(Function instanceof Function);
    //相当于
    console.log(Function.__proto__ === Function.prototype);

    console.log(Function instanceof Object);
    //相当于
    console.log(Function.__proto__.__proto__ === Object.prototype);

    console.log(Object instanceof Function);
    //相当于
    console.log(Object.__proto__ === Function.prototype);

    console.log(Object instanceof Object);
    //相当于
    console.log(Object.__proto__.__proto__ === Object.prototype);

结果

 

请结合上图自己看

 

就写到这吧,emmm......

 

电路中的DGND、GROUND、GROUND_REF的区别,VREF、VCC、VDD、VEE和VSS的区别? DGND是数字地,是数字电路部分的公共基准端,用于连接数字电路的接地。 阅读详情

相关推荐

旋转矩阵的左乘与右乘

旋转矩阵左右乘的详细讲解

qq_46619194的博客 3329

原型链的理解

原型链的理解

joy_zhuo_的博客 365

深度解析direct path write temp与ASM IO性能问题:Oracle 19.17视图查询优化指南

本文深度解析了Oracle 19.17版本中复杂视图查询出现`direct path write temp`与`ASM IO for non-blocking poll`性能瓶颈的根本原因。通过对比11.2.0.4版本的执行计划差异,文章提供了从CBO参数调整、存储层优化到SQL架构重构的完整实战调优指南,帮助DBA有效解决升级后的查询性能问题。

2y3u4i5o6p的博客 1100

JavaScript原型链

1.原型链 1.1 原型链解释: (概念) 原型链指一些原型通过__proto__指针构成的链表,一个原型链可以为想共享原型链中数据的对象服务,用于实现JavaScript中的继承机制。 (原型链指针) 原型链中涉及到的指针: 每个对象都有一个__proto__指针来访问对象的原型 每个原型都是一个用于实现继承的对象,除了有__proto__指针之外,还有constructor指针指向构造函数 每个函数都是一个对象,除了有__proto__指针之外,还有prototype指针指向与之关联的原型对象

qq_37464878的博客 6692

GD32F303开发实战(一):从零搭建MDK工程与时钟配置详解

本文详细介绍了如何从零开始为GD32F303微控制器搭建一个清晰、可维护的MDK工程模板。内容涵盖开发环境准备、工程目录结构规划、文件分组管理、关键工程配置,并重点解析了时钟树原理,手把手指导配置108MHz系统时钟。通过实战步骤与常见问题排查,帮助开发者构建一个稳定可靠的开发基础,便于后续功能扩展。

weixin_29174141的博客 270

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章:【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct构建最新的LLaMA-Factory镜像。

q742971636的博客 2583

超详细JS原型链(建议收藏)

JS原型链

weixin_48675760的博客 5567

BIDS数据存储格式介绍与dcm2bids安装与使用

BIDS格式&dcm2bids安装与使用

machinelearning_er的博客 7317

JavaScript原型链(重要)

什么是原型链,什么是原型对象,什么是对象原型! 利用funcation关键字定义函数,也叫命名函数//定义,利用funcation命名函数functionfn(){}fn()利用字面量定义函数,也叫匿名函数//2.字面量定义匿名函数varfn1=function(){}fn1()由于声明函数方式的不同以及预解析的因素,导致1,2两种方式略微不同。...

抗争小青年的博客 2319

构建基于知识图谱的金融风险关联网络

在金融领域,风险的识别和管理至关重要。传统的风险分析方法往往只能处理单一维度的数据,难以全面捕捉金融市场中复杂的风险关联关系。构建基于知识图谱的金融风险关联网络的目的在于整合多源异构的金融数据,通过知识图谱的方式清晰地展示金融实体之间的复杂关系,从而更准确地识别潜在的金融风险,为金融机构的风险管理决策提供有力支持。本项目的范围涵盖了从金融数据的收集、预处理,到知识图谱的构建,再到金融风险关联网络的搭建和分析。

SuperAGI2025 1421

osgPython

osgPython是一组 Python 模块,为 OpenSceneGraph 的 C++ 库提供了完整的 Python 接口。这意味着你可以在 Python 中调用几乎所有的 OSG 功能,从创建简单的场景到复杂的渲染效果。核心优势开发速度快:Python 语法简洁,无需编译,快速迭代易于学习:比 C++ 更易上手,适合原型开发和教学生态丰富:可以结合 NumPy、Matplotlib 等科学计算库跨平台:与 OSG 一样支持 Windows、Linux、macOS性能考虑。

深之JohnChen的专栏 454

javascript原型 原型链

1 一切都是对象 “一切都是对象”这句话的重点在于如何去理解“对象”这个概念。 ——当然,也不是所有的都是对象,值类型就不是对象。 首先咱们还是先看看javascript中一个常用的运算符——typeof <script type="text/javascript"> //1. 基本 // typeof返回数据类型的字符串表达 // <!-- // 1. 分类 // * 基本(值)类型 // * String: 任意字符串 // * Number

gqk01的博客 1364

Spring AI提示词模板应用

本文介绍了使用SpringAI提示词模板的配置方法,主要步骤包括:1)在JDK17和SpringBoot3.4.4环境下引入spring-ai-alibaba1.0.0.2依赖;2)配置application.yml文件;3)创建测试控制器类处理提示词模板(.st文件);4)通过模板变量动态生成AI回复内容。演示了如何通过@RequestParam设置默认参数,实现无需前端传参即可测试AI回复功能,最终完成了一个SpringAI提示词模板的应用Demo。

wjianwei666的专栏 198

浅谈js原型原型链

原型和原型链是js的核心,因为js是以原型链的形式,保证函数或对象的属性可以向下传递。那来看看什么是原型链。 一、基本概念 –proto–:每一个实例对象都有一个私有属性(–proto–),指向它的构造函数的原型对象。该原型对象上也有一个自己的–proto–,可以指向它的原型对象,这样可以一直找到object,object是所有对象的原型,最终指向null。 prototype:指向对象或函数的原型,只有函数才有prototype。 constructor:指向原型对象的构造函数。 二、构造函数与原型的关系

qq_43690370的博客 239

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

浅谈JavaScript的原型与原型链

相关概念 对于使用过基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 有点令人困惑,因为它是动态的,并且本身不提供一个 class 实现。(在 ES2015/ES6 中引入了 class 关键字,但那只是语法糖,JavaScript 仍然是基于原型的)。 当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象( object )都有一个私有属性(称之为 proto )指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象( prot

qq_40545204的博客 193

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

浅谈 JavaScript 原型链

原文出自:https://www.pandashen.com 概述 在 JavaScript 中有种说法叫 “万物皆对象”,就是说无论是构造函数创建的实例,构造函数本身、原型对象、数组、函数本质上都是对象,都拥有 __proto__ 属性,即隐式原型,所有函数都拥有 prototype 属性,即显式原型(仅限函数),原型对象(prototype 属性指向的对象),在定义函数时就被创建。 原...

github_38140984的博客 307

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

浅谈js中的原型、原型链、原型链继承

原型对象、 构造函数、实例对象 原型对象:这个要从构造函数开始说起,每个构造函数都会带有一个 prototype 属性。该属性是个指针,指向了一个对象,我们称之为 原型对象。什么是指针?指针就好比学生的学号,原型对象则是那个学生。我们通过学号找到唯一的那个学生。假设突然,指针设置 null, 学号重置空了,不要慌,对象还存在,学生也没消失。只是不好找了,用代码来解释可以这样 Person.prot...

hp123456003的博客 305

浅谈js原型和原型链

一、简述 对于javascript 对象(函数) 原型和原型链的理解,其实不那么难,简单来说,需要理解什么是原型,怎么访问原型,什么是原型链,怎么通过原型链去访问原型,就可以大概理清楚原型和原型链的基础知识。 二、浅析 1、何为原型 在js引擎启动的时候,其内核就生成了最基本的Object和Function的原型内容,也就是最原始最自然的代码。 (1)Object的原型是一个对象变量,该对象变量存...

hao255的博客 1312

浅谈JavaScript原型链机制

接上一条,如果遍历其原型链时存在对应的foo属性,并且该属性只读(writable:false),则不会修改该属性或者创建该对象实例的直接属性,总之什么都不会发生(在非严格模式下会抛出错误)此方法与(2)相比,解决了原型对象引用共享的问题,但是如果函数Foo存在一些副作用(如修改状态,给this添加属性等),同样会影响到Bar的实例对象,此法也不可取。如果obj对象没有直接包含名为foo的属性,就会历其原型链,如果仍然找不到名为foo的属性,则foo会被添加到obj的直接包含属性中。有一定轻微性能损失。

qq_43293207的博客 469

ZCode:重构开发工作流的AI原生操作系统

现代开发者正从‘多工具切换’迈向‘统一智能工作流’,ZCode作为新一代AI原生开发操作系统,通过跨进程状态同步、自然语言终端指令编译、桌面空间语义感知等核心技术,将代码编辑、终端执行与文档浏览融合为有机整体。它不依赖云端上传,所有AI推理与代码分析均在本地完成,兼顾安全性与响应速度;支持Linux企业发行版、WSL2及嵌入式设备协议抽象,适用于金融、政务、IoT等高要求场景。其CLI工具链可深度集成CI/CD,实现AI驱动的自动化决策与回滚——这不仅是IDE升级,更是开发范式的根本迁移。

weixin_34221773的博客 118

浅谈js中的原型及原型链

要想明白js中原型以及原型链是什么,就需要先搞明白对象和函数的关系 Object和Function的关系 Object和Function都作为JS的自带函数,Object继承自己,Funtion继承自己,Object和Function互相是继承对方,也就是说Object和Function都既是函数也是对象。 console.log(Function instanceof Object); //...

wxd_97的博客 1136

浅谈js中的原型与原型链

了解原型首先要了解构造函数 一、构造函数 构造函数模式的目的是为了创建一个自定义类,并创建这个类的实例,构造函数模式中拥有了类和实例的概念, 构造函数本身也是一个普通的函数,创建方式和普通函数没有区别,旦构造函数习惯上首字母大写。另外就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new关键字来调用。 <script> function Person(name,age...

TXW6666的博客 250

浅谈javascript之原型和原型链

原型和原型链是js中的难点也是重点,明白了原型和原型链会让我们在后面不管是学习还是工作都会更加高效,并且原型和原型链会是面试中必不可少的话题。 一,函数对象 所有引用类型(函数,数组,对象)都拥有__proto__属性(隐式原型) 所有函数拥有prototype属性(显式原型)(仅限函数) 原型对象:拥有prototype属性的对象,在定义函数时就被创建 二,构造函数 //创建构造函数 ...

mo123456opuiop的博客 203

JavaScript基础之浅谈原型和原型链

前面聊了一些对象的构造函数,前面如果了解的后就可以聊原型和原型链了,其实这个听着很瘆人,不过简单的了解然后换一个名词,觉得原来如此了。 原型(prototype) 原型(prototype)其实就是function的对象的一个属性,打印出来的话也就是一个对象,如下 function Objthis(name,year){ this.name=name; this.year=year; } console.log(Objthis.prototype) 既然

u011863822的博客 1742

浅谈JavaScript中的原型,原型链

JavaScript中的原型,原型链 在构造函数中: function Person(first, last, age, eyecolor) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eyecolor; } 如果我们想给这个函数增加属性,就会发现我们无法为已有的对象构造器添加新属性。 Person.nationality = "English"; 如需向构

fish_skyyyy的博客 294
上一篇: 浅谈JavaScript构造函数和原型
下一篇: 关于 ["1", "2", "3"].map(parseInt) 为什么返回 [1,NaN,NaN]?
不想飞的狗
博客等级 码龄9年 160粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值