js 继承思想

堆一呼一吸之间:动态扩缩容引发JVM堆内存震荡的伸缩算法、代际传导与容器定容解析 Kubernetes扩容后,新Java实例的GC频率常比老实例高出数倍,堆容量反复伸缩。本文从一次支付系统的GC陡增出发,结合HotSpot源码与JDK 8实测,拆解堆伸缩的记账规则:期望容量以GC后已用量为基数、以Xms为下限,按空闲比例判断扩缩,收缩只在老年代回收后按0%、10%、40%、100%步进;再剖析年轻代随老年代联动、晋升风暴与元空间触发线,对比Parallel、G1、ZGC等收集器及JDK 26的变化,讨论容器分账、HPA共振与原地扩缩容,最后给出分级定容、预热与监控的方案。 阅读详情

在学习继承之前,我们要知道一个概念,那就是原型和原型对象。
原型对象:原型对象是构造函数(也就是非箭头函数)所特有的一块区域,用来共享实例间的数据。
原型就是[[prototype]]指向的区域,所有的引用类型都具有[[prototype]]属性。
还需要了解一个知识,构造函数的实例对象中的原型,默认指向该构造函数的原型对象,并且js在查找数据时,会顺着原型链向上查找,直到寻找到原型链的终点null返回undefined。
好了,现在我们进入主题,了解js的继承机制。

1. 使用原型链继承

思想: 让派生构造函数的原型对象指向父构造函数的实例。

  • 优势:所有派生构造函数的实例都可以使用父构造函数原型对象中的方法
  • 不足:所有派生构造函数的实例共用同一个父构造函数实例的属性colors
        function SuperType (){
            this.colors = ['red', 'black'];
        }
        function SubType(){
            this.name = '哈哈'
        }
        SubType.prototype = new SuperType();
        let instance1 = new SubType();
        let instance2 = new SubType();
        instance1.colors.push('white')
        console.log(instance2.colors);// ['red', 'black', 'white']

由于原型链的继承方式的不足,我们引入了一种新的继承法方式。

2. 盗用构造函数

思想: 在派生构造函数中调用父构造函数

  • 优点:继承了父构造函数中的属性,并且实例间不在共享
  • 不足:派生构造函数的实例不可以使用父构造函数原型对象中方法
  function SuperType (){
            this.colors = ['red', 'black'];
        }
        SuperType.prototype.getColors = function(){
            console.log(this.colors);
        }
        function SubType(){
            SuperType.call(this);
        }
        let instance1 = new SubType();
        let instance2 = new SubType();
        instance1.colors.push('blue')
        console.log(instance2.colors)// ['red', 'black']
        console.log(instance1.colors) // ['red', 'black', 'blue']

这样我们将原型链和盗用构造函数两种继承方式优势相结合,就产生了一种新的继承方式。

3. 组合继承

思想: 结合了原型链和盗用构造函数的思想。

  • 优点:实现了继承的基本模式,派生构造函数实例中有了父构造函数的属性,并且实例之间不会共享,也可以使用父构造函数原型对象中的方法。
  • 不足:可以看到,父构造函数执行了两次,第一次是将其实例对象赋值给oldPeople的时候,第二次是创建子实例的时候。
function People( gender ){
	this.gender = gender;
}
People.prototype.say = function () {
	console.log('我的性别', this.gender, this. age);
}
function oldPeople(name, gender, age){
	People.call(this, sex);
	this.name = name;
	this.age = age;
}
oldPeople.prototype = new People();
let oldWoman = new oldPeople('小红', '女', 80);
let oldMan = new oldPeople('小明', '男', 81);
oldWoman.say(); // 我的性别是女 80
oldMan.say();// 我的性别是女 81

4. 原型式继承

思想: 将子对象的原型指向父对象

  • 优点:不需要单独创建构造函数,就可以在对象间共享信息
  • 不足:同原型继承一样,子对象共享父对象的属性
    该种继承方式规范化其实就是Object.create的静态方法
    function object (o) {
        function F() {}
        F.prototype = o;
        return new F();
    }
    let person = {
        name: '小明',
        friends: ['小红','小绿']
    }
    let clone = object(person);

5. 寄生式继承

思想: 该思想同原型式继承一样,只是为对象新增了一个新的方法

        function object(o){
            function fn (){};
            fn.prototype = o;
            return new fn();
        }
        function createAnother( original ){
            let clone = object(original)
            clone.sayHi = function(){
                console.log('Hi');
            }
            return clone;
        }
        let person = {
            name: '小明',
            friends: ['小红', '小蓝']
        }
        let anotherPerson = createAnother(person);
        anotherPerson.sayHi();

6. 寄生式组合继承

思想: 使用寄生式继承来继承父类原型,然后盗用构造函数的思想继承父类属性。
寄生式继承可以算是引用类型继承的最佳模式了

        function SuperType (name){
            this.name = name;
        }
        SuperType.prototype.sayName = function(){
            console.log(this.name)
        }
        function SubType(age, name){
            SuperType.call(this, name);
            this.age = age
        }
        function inheritPrototype (SubType, SuperType){
            let prototype = SuperType.prototype;
            prototype.constructor = SubType;
            SubType.prototype = prototype;
        }
        inheritPrototype(SubType, SuperType);
        SubType.prototype.sayAge = function (){
            console.log(this.age);
        }
        let person1 = new SubType(12, '小明');
        let person2 = new SubType(18, '小红');
        person1.sayAge();
        person1.sayName();
        person2.sayAge();
        person2.sayName();

以上就是 js中 实现继承的全部方式,在ES6之后,出现了 class 和 extends,其背后思想其实就是使用构造函数的继承来实现的。

大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现 大华 DSs 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。大华 DSS存在SQL注入漏洞,攻击者 pota/services/itcBuletin 路由发送特殊构造的数据包,利用报错注入获取数据库敏感信息。攻击者除了可以利用 SQL注入漏词获取数据库中的信息例如,管理员后台密码、站点的用户人人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限poc验证是否存在漏洞如果你想查询用户名和密码。 阅读详情

相关推荐

SOLIDWORKS转CAD字体终极选择:TrueType vs SHX,哪个才是你图纸协作的“安全牌”?

本文深入探讨SOLIDWORKS转CAD工程图中的字体选择问题,对比TrueType与SHX字体在DWG文件协作中的表现。通过真实案例揭示字体映射的兼容性陷阱,提供企业级字体管理方案,帮助工程师规避版本差异、系统依赖和法律风险,确保图纸协作的稳定性。

weixin_34233974的博客 264

Javascript继承机制的设计思想

Javascript继承机制的设计思想 作者: 阮一峰 本文转载自阮一峰Javascript继承机制的设计思想 我一直很难理解Javascript语言的继承机制。 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承。 我花了很多时间,学习这个部分,还做了很多笔记。但是都属于强行...

飘 379

小白投资理财 - 解读威廉分形指标 Williams Fractals

威廉分形指标用于识别价格趋势中的关键点,帮助判断支撑位和阻力位。

wumingxiaoyao的博客 4336

js的继承思想

js的prototype属性 定义和用法: prototype 属性使您有能力向对象(函数)添加属性和方法,因为函数也是对象。prototype是函数的的属性,本质是函数的原型对象。 是的,就是因为函数调用prototype的时候是和对象调用属性的时候一样的,我们才把prototype说成是函数的一个属性,而函数的这个属性其实是一个对象 特别指出:    ...

weixin_30674525的博客 104

YOLOv8改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣本专栏已更新150多种不同的改进方法,所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行。2️⃣所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,紧跟学术热点,适应不同的任务场景。3️⃣团队内发表数篇SCI论文,熟悉完整的发表流程,订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容。4️⃣专栏内容会持续更新,最近更新时间:2024-12-24。项目介绍在大家购买专栏后,加入学

Limiiiing的博客 1万+

【OpenClaw从入门到精通】第11篇:OpenClaw 2026多模态实战全攻略:OCR/语音/图像自动化(附完整代码+双部署方案)

本文聚焦OpenClaw 2026版核心升级的多模态能力,从底层架构原理到实操落地全流程拆解。先解析“统一指令解析+多工具适配器”的核心设计逻辑,再提供阿里云规模化部署(适合批量任务)与本地汉化版部署(适合隐私数据调试)的详细步骤,含依赖安装、配置验证完整操作;随后落地三大高频实战场景——OCR合同信息结构化提取、会议录音自动转写纪要、电商商品图片智能打标,每个场景均提供可直接运行的完整代码、执行结果演示及流程说明;最后补充多模态任务避坑指南、性能优化技巧与成本控制方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2611

JavaScript继承的思想实现

JavaScript作为一门语法比较松散的语言,在ES6之前并没有像C++/Java等传统OO语言一样有class关键字,也不能通过private,public等关键字来限定权限。本篇就介绍一下JavaScript是如何实现继承的。   JavaScript的继承可以分为两类: 查找资源就上:去转盘(www.quzhuanpan.com) 基于对象的继承 基于类型的继承 基于对象...

u012577904的博客 274

人工智能训练师三级考试大纲深度解读|理论+实操分值分布+六大模块占比

三级人工智能训练师考试分为理论和实操两大模块(各100分,合格线60分)。理论考试包含AI基础(30%)、数据标注(25%)、模型训练(20%)、测试(15%)和系统运维(10%),题型为客观题;实操考核侧重数据标注(40%)、模型测试(35%)和系统运维(25%),采用现场操作形式。复习应优先关注AI基础和数据标注等高分值模块,实操需重点掌握标准流程和结果准确性(占评分70%)。考试要求两模块均达标,理论侧重概念理解,实操强调规范执行与文档完整。

白话机器学习 1093

原型和原型链—Javascript继承机制的设计思想

写在前面: 以前一直不懂原型和原型链的含义,虽然看过几篇介绍,仍然处于似懂非懂的状态。后来看到一篇文章,通俗易懂,可以很好地理解原型和原型链。先说一下原型和原型链的定义。 原型:JS中的对象都包含了一个prototype的内部属性,这个属性所对应的就是该对象的原型。 原型链:原型链是是有一些用来继承和共享属性的对象组成的对象链。并且原型链的长度是有限的。 正文: 我一直很难理解Javas...

阵雨的博客 599

Xilinx_JESD204B

Xilinx_JESD204B_AXI配置 说明:通过FPGA的高速数据接口JESD204B对AD9625进行高速采集。 环境:Vivado2018.3。 IP核:JESD204(7.2)。 参考手册:pg066_jesd204 v7.2。 资料以及IP_licence:JESD204B AXI协议资料:AXI 文章目录JESD204B概述JESD204B接口术语JESD204B 层JESD204B_AXI介绍AXI介绍JESD204B__AXI_Lite接口AXI-Lite接口介绍AXI-Lite接口信号

Crazzy_M的博客 1万+

使用Zed 实现测距

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面的深度值,为yolo测距打基础。Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专为计算机视觉和机器学习应用而设计,能够提供高质量的3D捕捉和分析功能。: Zed相机配备有一对垂直排列的传感器,能够捕捉两个略有偏移的图像,从而模拟人的双眼视觉,实现深度感知。: 利用立体成像技术,Zed相机能够实时生成环境的3D模型,这对于机器人导航、增强现实(AR)和虚拟现实(VR)等应用至关重要。

weixin_45303602的博客 912

JS继承机制思想

发现一个超级棒的博客@作者:阮一峰,给大家推荐,大家可以直接进入他的博客阮一峰博客原文 跟着大神开始学继承,姑娘撸起袖子开始干了,菜鸟一枚完全跟着大神学 JS中没有“子类”和“父类”,也没有“类”(class)和”实例”(instance)的区分,全靠一种奇特的”原型链”,来实现继承 一.JS的诞生 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是历...

hhthwx的博客 281

GIS数据处理-使用PostGIS+QGIS

GIS数据处理1-使用PostGIS+QGIS 介绍 这里我遇到了一个需求,需要将SQLite的.db数据库中GIS数据导出成shapefile文件 数据库的表结构如下所示,这里存储的是wkt格式的矢量数据 WKT与WKB格式介绍 OpenGIS 规范定义了两种表示空间对象的标准方式:Well-Know Text (WKT) 形式和Well-Known Binary(WKB) 形式。WKT 和 WKB 都包含矢量几何要素的对象类型和构成对象的坐标的信息。WKT可读性强,更方便阅读识别,而在实际数据传输和存

孙霸天的专栏 2528

Javascript(Prototype)继承机制的设计思想

摘自:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html 作者: 阮一峰 日期: 2011年6月 5日 我一直很难理解Javascript语言的继承机制。 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(ins...

weixin_30764137的博客 127

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

个人对Javascript的继承思想的理解

构造函数的继承 近看了阮一峰老师对于javascipt继承思想的阐述。自己也加深了对于javascipt的理解 这里写一下个人对于Javascipt继承思想的理解 1.首先需要说明的一点是js(javascipt)是没有类(class)的概念。具体是为什么没有。根据js的创始人(工程师Brendan Eich)的思想是不想让这门语言太过于正式。也不会增加入门的难度; 不...

人在路上走 453

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JavaScript的面向对象编程思想与原型继承

我们从多态说起,也就是常说的“鸭子模型”,JavaScript所谓的“鸭子模型”,是指一种动态类型语言的编程风格,形容在运行时,只要一个对象具有某些方法或属性,就可以认为它是某种类型的实例,不要求严格的类型一致性,只要相似就可以认为是同一类。在JavaScript中,由于语言的动态性,对象的类型是在运行时决定的,而不是在编译时静态决定的,因此可以用同样的方式对待不同形状的对象。我们无需强制一个对象必须是某个特定类的实例,而是可以根据形状和行为来组织代码。

weixin_45768166的博客 236

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

再谈JavaScript面向对象思想及继承

前言 为什么说是再谈呢,网上讲解这个的博客的很多,我开始学习也是看过,敲过就没了,自以为理解了就结束了,书到用时方恨少啊。实际开发中一用就打磕巴,于是在重新学习了之后分享出来。开了这么一个宏观的题目,需要做一下简单说明,这篇文章将会讲解以下几个问题: 什么是面向对象编程思想,为什么要用面向对象思想。 js中的面向对象思想和其他静态语言相...

weixin_33973609的博客 117

Javascript的原型继承思想

网景之初,急需一种脚本语言,使得浏览器可以与网页互动。 工程师Brendan Eich负责开发这种新语言。 他觉得,没必要设计的很复杂,这种语言只要能够完成一些简单操作就够了,比如判断用户有没有填写表单。 1994年正是面向对象编程(object-oriented programming)最兴盛的时期,C++是当时最流行的语言,而java语言的1.0版即将于第二年推出,Sun公司正在大肆造势

kui_002的专栏 539
上一篇: 彻底弄懂 Object 上的静态方法
下一篇: js 原生dom 操作
程序员-石头山
博客等级 码龄6年 1122粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员-石头山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值