对象原型链初步总结

Python:由于目标计算机积极拒绝,无法连接 问题描述 今天想学习一下用Python的pandas库处理CSV文件,并绘制一些图形,在安装pandas时出现了一系列问题 首先是使用 pip install pandas 显示如下错误 找了半天也没找到什么解决办法,于是采用去下载安装包的方法进行安装,进入之后发现Python版本处写的并不是自己熟悉的Python 3.9.1之类的字样而是CP37之类的 经查阅后了解到这里的CP是指CPython,即用C语言写的Python解释器 。但是问题是下载了一个CP37的包在安装时显示 ... 阅读详情

对象原型链是必须掌握的一项重要知识点,尤其是在分析对象方法继承的时候,往往会因为看起来过于复杂而无从下手,这就是原型链基础不够牢固而造成的,作为js初学者,我将开始对对象原型链基础进行一次初步总结,欢迎指正

一.对象创建

首先,我们知道对象有三种创建方式

1.直接量方式

顾名思义,直接创建对象以及它的属性名,属性值

      var PC = {//使用var声明一个对象
           cpu:'i5-11260H',//直接定义对象中的属性以及其属性值
           gpu:'RTX3050',
           ram:'16GB',
           SSD:'1TB',
           price:'$4850'
        }

2.工厂模式

即采用function函数设置形参,并通过获取返回值的方式创建对象

   function createPC(cpu,gpu,ram,SSD,price){
//使用function创建一个函数createPC,形参为cpu,gpu,ram,SSD,price
            var com = {};//在函数中创建一个空对象com
            com.cpu = cpu;//将形参被传值后所变为的实参传值给com的cpu属性
            com.gpu = gpu;//同上,属性为gpu
            com.ram = ram;//同上, 属性为ram
            com.SSD = SSD;//同上, 属性为SSD
            com.price = price;//同上, 属性为price
            return com;//返回被传值后的对象com
        }


var pc1 = createPC('R5-5500','GTX750ti','8GB','4TB','$2000')
//执行赋值,createPC传入实参,随后执行函数,最后返回的则是对象com的属性和属性值作为之前被var声明对象pc1的值
var pc2 = createPC('i5-11260H','RTX3050','16GB','1TB','$4850')
//执行赋值,createPC传入实参,随后执行函数,最后返回的则是对象com的属性和属性值作为之前被var声明对象pc2的值        

3.自定义构造函数创建对象

 function student(id,age,hobby){//使用function创建构造函数student,形参为id,age和hobby
/*  new 关键字做了什么
        1. 创建了一个新对象
        2. 将构造函数的this指向了这个新对象
        3. 将新对象的__propto__指向了构造函数的prototype
        4. 执行构造函数的代码
        5. 返回this */       
        this.id = id?id:999;//这里包括以下的this可以理解为指向的都是student构造函数使用new创建出来的对象
        this.age = age?age:2.5;
        this.hobby = hobby?hobby:'basketball';
        
    }
    var ikun = new student();//使用student创建一个对象
    var ikun = new student(1,2,'football')//也可以传入实参

注意,工厂函数与构造函数不要混合使用,容易产生一些隐患,这里不作赘述

二.构造函数对象原型链:

从new关键字步骤的第三步中,我们知道了新对象的__proto__属性指向了构造函数的prototype属性,这就引出了原型链的概念,就我的理解来说是一种对象属性方法继承的可抽象化的概念:

 1. 新对象都有一个属性 叫__proto__

 2. 构造函数都有一个属性 叫prototype

 3. 构造函数的原型对象上有一个属性 叫constructor 指向构造函数

 4. 所有的原型对象都是Object函数对象构造出来的(除Object本身的原型对象之外)

下面我用自己总结的一张图来完整展示一下原型链的基本方式

如上图所示我们可知,被创建的对象的__proto__指向的是构造函数的原型对象,而原型对象自然也具有自己的创建者,即object原型对象,因此它的__proto__指向的是object原型对象,而object原型对象的__proto__一定指向的是null

下面我们用js程序来表达这一顺序

这里用function举例,因为所有函数都是function函数对象构造的,也包括object函数

而function由于是最顶层,因此它是自己构造了自己,而其他构造函数则都是function构造的

      //所有的函数都是Function函数对象构造的
      console.log(Person.__proto__ === Function.prototype); // true
      console.log(Function.prototype.__proto__ === Object.prototype); // true
      console.log(Function.prototype.__proto__.__proto__ === null); // true
      console.log(Person.__proto__.__proto__.__proto__ === null); // true

      // 2. Function顶层没有人构造 自己构造了自己
      console.log(Function.__proto__ === Function.prototype); // true
      // console.log(Function.prototype.__proto__ === Object.prototype);

      console.log(Function.__proto__.__proto__ === Object.prototype); // true

      console.log(Object.__proto__ === Function.prototype); // true
      // console.log(Function.prototype.__proto__ === Object.prototype);
      console.log(Object.__proto__.__proto__ === Object.prototype); // true
      console.log(Object.__proto__.__proto__.__proto__); // null
      console.log(Function.__proto__.__proto__.__proto__); // null

三.内置构造函数的原型链:

比较常用的有 Number String Boolean Array Function这些,而如果要引用它们中的方法就一定要搞清楚其中的原型链,否则无法引用

      var n = 999;
      console.log(n.__proto__ === Number.prototype); // true
      console.log(Number.prototype.__proto__ === Object.prototype);
      console.log(n.__proto__.__proto__ === Object.prototype);
      console.log(n.__proto__.__proto__.__proto__ === null);

      var str = '999';
      console.log(str.__proto__ === String.prototype);
      console.log(str.__proto__.__proto__ === Object.prototype);
      console.log(str.__proto__.__proto__.__proto__ === null);

      var bl = true;
      console.log(bl.__proto__ === Boolean.prototype);
      console.log(bl.__proto__.__proto__ === Object.prototype);
      console.log(bl.__proto__.__proto__.__proto__ === null);

      var arr = [];
      console.log(arr.__proto__ === Array.prototype);
      console.log(arr.__proto__.__proto__ === Object.prototype);
      console.log(arr.__proto__.__proto__.__proto__ === null);

      var fn = function () {};
      console.log(fn.__proto__ === Function.prototype);
      console.log(fn.__proto__.__proto__ === Object.prototype);
      console.log(fn.__proto__.__proto__.__proto__ === null);

      var ikun = new fn();
      console.log(fnshili.__proto__ === fn.prototype);
      console.log(fnshili.__proto__.__proto__ === Object.prototype);
      console.log(fnshili.__proto__.__proto__.__proto__ === null);

而对于这些内置构造函数本身而言,它们的原型链则差别不大

      console.log(Number.__proto__ === Function.prototype);
      console.log(Number.__proto__.__proto__ === Object.prototype);


      console.log(Boolean.__proto__ === Function.prototype);
      console.log(Boolean.__proto__.__proto__ === Object.prototype);


      console.log(String.__proto__ === Function.prototype);
      console.log(String.__proto__.__proto__ === Object.prototype);


      console.log(Array.__proto__ === Function.prototype);
      console.log(Array.__proto__.__proto__ === Object.prototype);


      console.log(Date.__proto__ === Function.prototype);
      console.log(Date.__proto__.__proto__ === Object.prototype);
     
  
     
    
      
        //以上结果都为true

WRF气象建模实战:如何为JRA55非标准数据定制Vtable文件? 本文详细介绍了为WRF气象模型定制Vtable文件以支持JRA55非标准数据(特别是积雪数据)的完整实战流程。文章深入解析了WPS数据流中Vtable的核心映射逻辑,提供了从GRIB文件诊断、Vtable编写到METGRID.TBL调优的通用方法论,帮助用户解决非标准气象数据源适配的关键技术挑战。 阅读详情

相关推荐

最全中文停用词表(可直接复制)

最全的停用此表整理 词表名 词表文件 中文停用词表 cn_stopwords.txt 哈工大停用词表 hit_stopwords.txt 百度停用词表 baidu_stopwords.txt 机器智能实验室停用词库 scu_stopwords.txt 以上停用词表链接:https://github.com/goto456/stopwords 以下是我常用的1893个停用词,可直接复制 ! " # $ % & ' ( ) * + , - -- . .. ... ....

dilifish的博客 12万+

面向对象的原型及原型链

构造函数是使用了new关键字的函数,用来创建对象,所有函数都是Function()的实例原型对象是用来存放实例对象的公有属性和公有方法的一个公共对象,所有原型对象都是Object()的实例原型链又叫隐式原型链,是由__proto__属性串联起来,原型链的尽头是Object.prototype原型和原型链_Dinmunh的博客-CSDN博客。

cxx_sunshine的博客 229

危废焚烧优化控制系统设计与实现:基于数据驱动的控制参数预测

本文提出了一种基于数据驱动的危险废物焚烧过程优化控制方法。系统利用历史运行数据和实时监测数据,通过深度学习模型预测关键控制参数,实现焚烧过程的智能化控制。系统采用Python开发,结合TensorFlow/PyTorch框架,构建了完整的数据采集、预处理、特征工程、模型训练和实时预测闭环系统。该系统能够处理多变量非线性关系,适应工况变化,从历史数据中学习最优控制策略,相比传统PID控制方法具有显著优势。论文详细介绍了系统架构、算法设计和实现细节,为危废焚烧过程的优化控制提供了有效解决方案。

huanghm88的专栏 175

知识总结:什么是原型、原型对象原型链原型链如何继承?如何访问原型对象上的属性?属性的访问规则是什么?如何设置原型对象的属性?

1、隐式原型和显示原型JavaScript 的所有对象中都有一个原型,称为隐式原型(__proto__)。隐式原型指向构建出这个实例的类的显示原型(prototype)。this.major = '语文'Student.prototype.type = '学生'let student = new Student('小草莓')console.log('对象的隐式原型:student.__proto__', student.__proto__)

小草莓的博客 2816

原型对象原型链超详细讲解(附图解)

原型对象原型链超详细讲解(附图解)一、函数的原型对象二、prototype(函数的原型)三、__ proto__(原型链)四、constructor(构造函数)五、prototype继承六、结论1.实例对象原型链指向当前类的原型对象。2.原型对象原型链指向Object函数的原型对象3.Object函数的原型对象原型链指向null,Object的原型链是不存在的。4.所有对象最后都会指向Object函数的原型对象。七、图解过程 一、函数的原型对象 原型对象中有原型链—指向最高 函数的原型对.

赵佳敏的博客 4942

对象原型链浅谈

这里对原型链做一个简单的介绍,并例举了原型链的一些实例和用法法,都是自己学习的一些笔记,发出来方便大家按需食用,希望对大家有些帮助。

ygx_brightness的博客 903

JavaScript深入了解对象的原型,原型链(附有详细图解)

首先要明白JavaScript是一种基于原型的面向对象语言。接下来先明白几个基本的概念。 function 对象(函数)的原型是Function; function 函数是 Function的子对象,function函数是当前function函数原型的构造方法/构造函数; new一个对象的时候,new的是被实例化对象的原型(property),后面的小括号是自动调用构造方法; Function 是 Object 的子对象,JS中顶级对象是Object; JS没有原生对象Window,Win.

githubcurry,985cs博士在读 2008

关于对象原型链的理解

关于对象原型链的理解

biaogeshiwo的博客 282

函数和对象原型链

在JavaScript中,每个对象都有一个特殊的隐藏属性__proto__,它指向该对象的原型。这个原型对象可能也有自己的原型,这样就形成了一个链条,这就是所谓的原型链原型链的顶端是,它的原型是null。

2301_77409965的博客 460

面向对象、继承、原型链、数组对象原型链、字符串对象原型链、日期对象原型链、DOM对象原型链、instanceof、arguments、rest参数、函数默认参数

面向对象三大特征 1.封装 : 把代码放入对象的方法中 2.继承 : 一个对象(儿子)有另一个对象(父亲)所有的成员(属性) * js语言侧重点继承 3.多态 : 一个对象在不同情况下的不同状态 * js语言不怎么用多态 继承 继承: 子对象有父对象所有的成员(属性) //父对象 let father = { house:{ address : '深圳湾一号', price: 20000000 }, car:{ brand : '劳斯莱

weixin_65100963的博客 231

js对象原型链

JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的所拥有。 这也就意味着,我们可以把所有对象实例需要共享的属性和方法直接定义在 prototype 对象上。 function Person (nam...

chongfufu5765的博客 122

Js对象原型链prototype

1.什么是原型链? 无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个 prototype属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向 prototype 属性所在函数的指针。 以下面这个空函数fun为例,当我们在程序中写了这样一个函数,js引擎实际上做了这么几件事: 为函数fun...

xyh的博客 303

mini-vue中的响应式对象原型链处理:继承属性

在mini-vue框架的响应式系统中,处理对象的继承属性是实现完整响应式功能的关键环节。当我们使用`reactive()`函数创建响应式对象时,不仅需要处理对象自身的属性,还要正确响应原型链上继承的属性访问和修改。本文将深入解析mini-vue如何通过Proxy代理和原型链遍历实现这一功能。 ## 响应式对象的基本实现原理 mini-vue的响应式系统核心实现位于[packages/react...

gitblog_00549的博客 820

javascript 创建对象对象原型链属性介绍

我们知道javascript里定义一个普通对象的方法,如: let obj = {}; obj.num = 1; obj.string = 'string'; obj.func = function(){alert('func')}; obj.arr = ['x','y']; console.log(obj.num); //1 console.log(obj.string)...

weixin_30871293的博客 111

空值NULL与undefined的区别

前言 不同语言有不同表示空值的写法和关键字 C++用NULL、java用null、Python用None NULL、JavaScript用NULL/undefined 一、NULL null :空值 语义:希望表示一个对象被人为的重置为空对象,而非一个变量最原始的状态 。 在内存里的表示就是,栈中的变量没有指向堆中的内存对象。 1、NULL是一个特殊的对象 typeof null //object null值表示一个空对象指针,它代表的其实就是一个空对象 Number(null)//0

weixin_45709829的博客 1758

js原型与原型链详解(万文总结,一文搞懂原型链!)

JavaScript中的原型和原型链:1,每个对象均存在隐式原型(__proto__),函数对象才有prototype属性2,__proto__存在的意义在于为原型链查找提供方向,原型链查找靠的是__proto__,而不是prototype3,函数对象的__proto__都指向Function.prototype4,每个对象都有一个隐式原型属性(__proto__),多个原型通过__proto__链接在一起形成的链式结构就是原型链😃。

Yi_qian的博客 3万+

JavaScript原生对象常用方法总结

目录 【1】Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 【2】Object.create()方法用于创建一个新对象。被创建对象会继承另一个对象的原型,在创建对象时还可以指定一些属性。 【3】Object.defineProperties()直接在一个对象上定义新的属性或修改现有属性,并返回该对象。 【4】Obje...

越努力,越幸运! 1287

JS系列(七) - 对象原型、原型链

前面我们说过, 每创建一个函数, 就会同时创建它的prototype对象, 这个对象也会自动获取constructor属性;JavaScript当中每个对象都有一个特殊的内置属性 [[prototype]],这个特殊的对象可以指向另外一个对象。2.这个对象内部的[[prototype]]属性会被赋值为该构造函数的prototype属性;如果对象中没有改属性,那么会访问对象[[prototype]]内置属性指向的对象上的属性;将对象的[[prototype]]属性赋值为该构造函数的prototype属性;

qq_44376306的博客 265

Javascript原型链详解,一文带你彻底搞懂js原型、原型对象原型链

原型链是 JavaScript 中的一个重要特性,它是实现对象之间继承关系的机制。在 JavaScript 中,每个对象都有一个原型属性,指向另一个对象。当试图访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 引擎会沿着原型链向上查找,直到找到对应的属性或方法为止。

greatming666的博客 2103

什么是原型对象原型链

对象 对象基础 对象的定义 对象是一个包含相关数据和方法的集合(通常由一些变量和函数组成,我们称之为对象里面的属性和方法)。 对象有时被称之为关联数组(associative array)了——对象做了字符串到值的映射,而数组做的是数字到值的映射。 创建一个对象通常先定义初始化变量。 var person = {}; person // Object {} 点表示法 对象的名字表现为一个命名空...

jinlovo 5460

你真的懂原型、原型链吗?

本文将详细介绍 JavaScript 中的原型和原型链,包括它们的定义、作用以及在实际编程中的应用。通过对这些概念的学习,我们将能够更深入地理解 JavaScript 的工作机制,从而编写出更高效、更优雅的代码...

潜隐-前端 1393

Comsol仿真热光伏电池[源码]

本文介绍了如何使用Comsol多物理场仿真软件对热光伏电池(TPV)进行仿真研究。热光伏电池是一种将热能直接转换为电能的技术,通过高温热源发射的红外辐射激发半导体材料中的电子-空穴对,从而产生电流。文章详细讲解了在Comsol中搭建TPV仿真模型的步骤,包括几何建模、材料属性定义、物理场设置(热传递、电磁辐射和半导体物理)以及仿真结果分析。通过仿真,可以优化TPV的设计,提高能量转换效率,为科研人员和工程师提供了强大的工具支持。

MCP4728_MCP4728_

MCP4728AD传感器,拥有4路AD通道,通过iic模块进行通信

kaiserash
博客等级 码龄5年 0粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值