js原型和原型链以及原型继承

article/2025/9/13 0:38:04

目录

一、原型

二、原型链

三、原型链继承


一、原型

原型是Javascript中的继承的基础,JavaScript的继承主要依靠原型链来实现的。

原型
​ 在JavaScript中,我们创建一个函数A(就是声明一个函数), 就会为该函数创建一个prototype属性。而且也会在内存中创建一个对象B,A函数的属性 prototype 指向这个对象B( 即:prototype的属性的值是这个对象 )。这个对象B就是函数A的原型对象,简称函数的原型。

二、原型链

原型本身也是一个对象,所以它也会有一个自己的原型,这一层一层的延续下去,直到最后指向 null,这就形成的 原型链

    //  原型和原型链1、通过工厂函数创建对象function createPerson(uname,age,phone){let obj = new Object();obj.uname = uname;obj.age   = age;obj.phone = phone;return obj;}let student0 = createPerson("aaa",20,"15156651651");let student1 = createPerson("bbbb",20,"15156651651");let student2 = createPerson("cccc",20,"15156651651");let student3 = createPerson("ddd",20,"15156651651");let student4 = createPerson("eeee",20,"15156651651");console.log(student0,student1,student2,student3,student4);function createDog(uname,age,type){let dog = {uname:uname,age:age,type:type}return dog;}let d0 = createDog("旺财",1,"中华田园犬");let d1 = createDog("旺财12",1,"中华田园犬");let d2 = createDog("旺财2",1,"中华田园犬");let d3 = createDog("旺财321",1,"中华田园犬");console.log(d0,d1,d2,d3);// 2、通过[构造函数]实例化对象function Person(uname,age,sex){  //构造函数this.uname = uname;this.age = age;this.sex = sex;}let p = new Person("小飞",18,"男");  //实例化对象let p1 = new Person("html",20,"nv ");console.log(p,p1);//   this  指向当前调用他的最终的对象/*  改变this指向一、call()  1、立即调用并执行函数2、可改变this指向3、传递字符形式的参数二、apply()  1、立即调用并执行函数2、可改变this指向3、只能传递数组的参数三、bind()1、不会调用并执行函数2、可改变this指向3、传递字符形式的参数四、 new 关键字1、在构造函数内部创建一个空对象2、将 this 指向到当前这个空对象上3、通过 this 向当前空对象上添加属性和方法4、返回对象*/

 //  所有函数都有原型对象//  构造函数访问原型对象  prototype  --- 存放公共方法//  实例对象访问原型对象  __proto__  --- 存放公共方法//  constructor  构造方法(原型对象创建的构造函数)//  构造函数function Person(uname,age,sex){this.uname = uname;this.age = age;this.sex = sex;// this.fn = function(){//     console.log(this.uname+"今年"+this.age+"岁了------"+this.sex);// }}Person.prototype.fn = function(){console.log("这是原型对象上的方法");}console.log("原型对象----  prototype",Person.prototype);let p = new Person("小飞",18,"男");  //实例化对象let p1 = new Person("html",20,"nv");   //实例化对象let p2 = new Person("css",20,"nv");   //实例化对象console.log(p,p1);// p.fn();//  p1.fn();//console.log(p.fn === p1.fn);// console.log(Person.prototype === p.__proto__ );// console.log(p1.fn === p.fn);// console.log(Person.prototype.constructor === Person);

图示原型原型链解释:

 蓝色为原型对象,简称原型

红色线连起来的为一条原型链

三、原型链继承

利用原型及原型链实现继承【面向对象】

 //利用原型及原型链实现继承【面向对象】//父  构造函数function Father(name,age,sex){// 指向创建它的实例对象 this.name = name;this.age = age;this.sex = sex;}//  Father构造函数的原型对象上的公共方法Father.prototype.money = function(){//原型对象上的this 指向 调用它的  实例对象console.log(this.name+"------在挣钱");}//  子 构造函数function Son(name,age,sex,email){// 指向创建它的实例对象  s//使用 call() 立即调用父类方法 ,并传递参数 【继承父类属性】Father.call(this,name,age,sex);//子类 自身属性this.email = email;/* this.name = name;this.age = age;this.sex = sex; */}//  直接将父构造函数的原型对象赋值给子构造函数的原型对象 // Son.prototype = Father.prototype;//  通过new 将父构造函数  的 实例对象  赋值给  son 的 原型对象Son.prototype = new Father();//利用  constructor  手动改变Son的原型对象的指向的构造函数Son.prototype.constructor = Son;// console.log("!!!",Son.prototype);//在son 的 原型对象上添加 game 方法Son.prototype.game = function(){console.log(this.name +  "-----在玩游戏");}let f = new Father("小飞",50,"男");let s = new Son("html",20,"女","1515616@163.com");console.log(f,s);f.money();s.money();s.game();

 


http://chatgpt.dhexx.cn/article/OkCXfp75.shtml

相关文章

原型、原型链和原型继承

原型继承 编程中对象继承,有类继承和原型继承: 类继承形式上就是,extends 关键字,继承之后,子类就会拥有父类的属性和方法,如下: // 以下是 ES6 class 语法,语法上同类继承一样&a…

【JS继承】JS继承之原型链继承

自我介绍:大家好,我是吉帅振的网络日志;微信公众号:吉帅振的网络日志;前端开发工程师,工作4年,去过上海、北京,经历创业公司,进过大厂,现在郑州敲代码。 JS继…

原型链以及继承的几种方式

原型链以及继承的几种方式 学习原型链前需要了解原型链继承的几种方式 学习原型链前需要了解 只要创建一个新函数,就会根据特定的规则为该函数创建一个 prototype 属性,这个属性是一个指针,指向一个对象。这个对象的用途是包含可以由特定类型…

深入JS原型、原型链和继承

文章目录 一、原型的理解1.对象的原型2.函数的原型3.constructor 二、原型链1.概念和理解2.原型链中最顶层的原型 三、继承1.原型链继承:2.借用构造函数继承: 一、原型的理解 1.对象的原型 JavaScript当中每个对象都有一个特殊的内置属性[[prototype]]…

原型链与继承

目录 原型链 继承 Javascript为什么没有方法签名? 原型链继承 构造函数继承 组合继承 原型式继承 寄生继承 寄生组合继承 原型链 原型链是一种原型对象和实例对象的关系,通过属性__proto__进行联系。 继承 继承是一种允许我们在已有的类的基…

JS原型链和继承

JS原型链和继承 认识对象的原型 [[Get]]:JS的存取描述符——get方法,在获取对象属性时会自动调用 JavaScript当中每个对象都有一个特殊的内置属性[[prototype]],这个特殊的属性指向另外一个对象 [[prototype]]指向的对象: 当我…

JS原型链继承

再讲述JS原型链继承之前,我希望大家能够先理解 《函数,函数原型和函数实例之间的关系》,这样有助于大家理解JS原型链继承的原理,下面先看一张图吧,咱们看图说话: 如果大家看完了 《函数,函数原型和函数实…

原型链和继承的六种实现方式

一省:HTML 12. img标签的alt和title有什么不同? alt: 当图片加载不出来的时候,就会在图片未显示的地方出现一段 alt 设置的属性内容。浏览器的搜索引擎可以通过 alt 属性的文字描述来获取图片。 title: title是鼠…

原型,原型链,原型的继承

原型的作用? 1.节省内存空间 2.实现数据共享(继承) 什么是原型? 任何一个函数都有propotype属性,它本身是一个对象,我们称之为原型 构造函数,实例化对象与原型之间的关系? 1.任何一个函数都有prototype属性,它本身是一个对象,我们称之为原型 2.构造函数也是函数,也都…

JS原型、原型链和7种继承方法【白话文讲解】

前言 在学习JS原型、原型链和继承之前,我们必须先弄懂三个W,也就是我们常说的“学习三问” 学习三问: 1.它是什么?(What) 2. 为什么用它?(Why) 3. 什么时候用它&#xff…

原型链与常用继承方法

原型链:当访问一个对象的属性时,如果该对象内部不存在这个属性,就会去该对象的__proto__ 上(也就是它构造函数的prototype)查找 。该构造函数的prototype上也有一个自己的__proto__ 属性,然后继续向上查找,…

如何用原型链的方式实现一个 JS 继承?

大家好,我是前端西瓜哥。今天讲一道经典的原型链面试题。 原型链是什么? JavaScript 中,每当创建一个对象,都会给这个对象提供一个内置对象 [[Prototype]] 。这个对象就是原型对象,[[Prototype]] 的层层嵌套就形成了…

JS学习笔记 原型链和利用原型实现继承

原型链 原型链是一种关系,实例对象和原型对象之间的关系,关系是通过原型(__proto__)来联系的 实例对象中有__proto__,是对象,叫原型,不是标准的属性,浏览器使用,并且有的游览器不支持构造函数中有prototype属性,也是对象,叫原型 注意 原型中的方法是可…

Arduino基本知识(marlin固件配置)

初识arduino,根据mega2560(某宝可以买到)官网的100个管脚具体控制一句传输进行操作。 https://www.arduino.cc/en/Hacking/PinMapping2560 其管脚图如上所示。 首先在官网下载arduino的配套软件 https://www.arduino.cc/ 对于编程&#xf…

3D打印机硬件驱动-马林固件最新版本2.0.X中文注释(3)marlin 2.0.9.2 截至发稿时间2021年12月16日

/** * Marlin 3D Printer Firmware 头描述详见其他两个文件头描述 * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * * Based on Sprinter and grbl. * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm * * This program is…

Marlin固件配置

文档来源自http://www.geek-workshop.com/thread-33314-1-1.html 1、基本配置基本配置是可选的,主要是给你的固件起个名字,如果你的配置很牛,让大家知道你是谁。据说这个在启动的时候会显示在显示屏中,应为我没有显示屏,所以无法验证。这个修改也很简单,通过搜索找到“S…

MKS MONSTER8 V1.0使用说明书(基于Marlin 2.0.X固件配置Voron 2.4)

广州谦辉信息科技有限公司 (基于Marlin 2.0.x 固件配置 Voron 2.4) 创客基地QQ群:489095605 232237692 邮箱:Huangkaidamakerbase.com.cn 主板购买链接:https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-23356668283.43.7eec55caLT…

ESP32烧录Marlin固件

安装platformIO 这点很简单,保证你拥有一个能够成功连接外网的环境即可。内网可能不太稳定有可能安装失败。 克隆代码 我这里采用的是fyset_e4的代码,这个代码开源在了https://github.com/FYSETC/FYSETC-E4,作者已经针对marlin固件做了一些配置。 更改…

i3型3D打印机制作详解——Marlin固件中文介绍

关注微信公众号:嵌入式基地 后台回复:3d打印机 获取资料 硬件框架搭建介绍 https://blog.csdn.net/qq_39020934/article/details/80380250 Marlin固件中文介绍 https://download.csdn.net/download/qq_39020934/10401251 …

3D打印机Marlin固件双Z轴设置

3D打印机Marlin固件双Z轴设置 在3D打印机Marlin固件的最新版本2.1.1中,设置双Z轴和老版本有一些改动。记录一下如何在最新版本的Marlin固件中设置双Z轴。 以MKS GEN_L V2.1的主板为例,硬件连接还是和原来一样,第二个Z轴的电动机连接到空闲的…