面向对象与原型重难点

面向对象软件设计的目标、原则和难点  3.1 软件设计的目标在设计时首要考虑的不适形象进度,而是系统的可维护性:(1)可扩展性(2)可修改性(3)可替换性 3.2 “开-闭”原则“开-闭”原则指软件实体应当对扩展开放,对修改关闭。即软件实体应该在不修改的前提下扩展。设计模式的应用就是使软件的结构在某种程度上满足“开-闭”原则。3.3 实现“开-闭”原则3.3.1 面向接口编程面向接口编程的优势:(1)降低程序个部分之间的耦合 阅读详情

一、创建对象

  1. 普通模式
    优点:
    缺点:每次实例化产生大量重复的代码

  2. 工厂模式
    优点:集中实例化解决普通模式实例化产生大量重复代码的问题
    缺点:无法区分谁到底是哪个对象的实例

  3. 构造函数
    优点:既解决普通模式重复实例化的问题也解决工厂模式对象识别问题
    缺点:两个实例化后的属性或方法不相等

二、5种函数模式

  1. 原型模式
    优点:解决构造函数两个实例化后的属性或方法不相等的问题
    缺点:无法传参,引用类型共享

  2. 原型模式+构造函数
    优点:这种模式很好的解决了传参和引用共享的大难题。是创建对象比较好的方法
    缺点:不论是否调用了原型中的共享属性或方法,它都会初始化原型中的方法,并且在申明一个对象时,构造函数+原型的模式会让人感觉很怪异

  3. 动态原型模式(原型模式+构造函数的封装升级版)
    优点:暂无
    缺点:暂无

  4. 寄生构造函数
    优点:
    缺点:

  5. 稳妥构造函数
    寄生构造函数和稳妥构造函数的函数结构一样,只是稳妥构造函数不使用this,实例化是不使用new
    优点:
    缺点:

三、6种继承模式

  1. 原型链继承
    优点:
    缺点:字面量重写原型会中断关系,使用引用类型的原型,子类型无法给超类型(父类型)传参

  2. 借用构造函数继承(对象冒充继承)
    优点:解决了原型链继承传参为题和共享问题
    缺点:对象冒充只能继承构造函数里的信息,无法继承原型里的信息

  3. 组合继承(原型链集成+对象冒充继承)
    优点:解决借用构造函数继承无法继承原型里信息的问题
    缺点:超类型会被调用两次

  4. 原型式继承(原型链继承的升级版,加了一个中转函数)
    优点:解决组合继承超类型被调用两次的问题。这种继承借助原型并基于已有的对象创建新对象,同时还不必因此创建自定义类型。
    缺点:还是会有引用类型会被共享的问题

  5. 寄生式继承(原型式继承的升级版,在原型是继承的基础上又加了一个中转函数)
    优点:
    缺点:

  6. 寄生组合式继承(组合继承的升级版,把其中原型继承的部分更换为寄生式继承)
    优点:
    缺点:

四、其它

  1. Object.definePorperty()①数据属性②访问器属性
  2. Object.getOwnPropertyPescriptor() 取得给定属性
  3. Object.defineProperties()为对象定义多个属性
  4. Object.isPrototypeOf()来判断一个对象是否指向了该构造函数的原型对象
  5. Object.getPrototypeOf()取得原型中的属性值
  6. Object.hasOwnProPerty()检测一个属性存在于实例中还是存在原型中

一、创建对象

①普通模式

缺点:①无法传参②多次实例化会产生大量的重复代码

var obj=new Object();
obj.name='chen';
obj.age=24;
obj.run=function(){
    return this.name+this.age+'运行中...';
}
return obj;

②工厂模式

优点:①解决普通模式无法传参问题②解决普通模式多次实例化会产生大量重复代码的问题
缺点:无法确定当前实例化对象到底是哪个函数对象的实例

function model(){
    var obj=new Object();
    obj.name='chen';
    obj.age=24;
    obj.run=function(){
        return this.name+this.age+'运行中...';
    }
    return obj;
}
function model2(){
    var obj=new Object();
    obj.name='chen';
    obj.age=24;
    obj.run=function(){
        return this.name+this.age+'运行中...';
    }
    return obj;
}
var box1=model();
var box2=model2();
alert(box1 instanceof model);//false
alert(box1 instanceof Object);//true
alert(box1 instanceof model2);//false
alert(box1 instanceof Object);//true

③构造函数

优点:解决工厂模式无法确定当前实例化对象到底是哪个函数对象的实例问题
缺点:每次实例化对象的函数方法地址不一样(对于这个例子是指run()方法的地址不一样)

function construct(name,age){
    this.name=name;
    this.age=age;
    this.run=function(){
        return this.name+this.age+'运行中';
    }
}

var box1=new construct('chen',24);
var box2=new construct('chen',24);
alert(box1.name==box2.name)//true
alert(box1.age==box2.age)//true
alert(box1.run()==box2.run())//true
alert(box1.run==box2.run)//false

可以把构造函数里的方法(或函数)用 new Function()方法来代替

function construct(name,age){
    this.name=name;
    this.age=age;
    this.run=link;
}
function link(){
    return this.name+this.age+'运行中';
}

我们可以通过构造函数外面绑定同一个函数的方法来保证引用地址的一致性,但这种做法没什么必要,只是加深学习了解

function construct1(name,age){
    this.name=name;
    this.age=age;
    this.run=new Function("return this.name+this.age+'运行中'");
}

二、5种函数模式

①原型模式

优点:解决构造函数①实例化方法地址不一样的问题②原型里的属性和方法可以共享
缺点:①无法传参,导致每次实例化结果都是一样②对于包含引用类型的值来说,原型的共享会存在问题

function proto(){}
proto.prototype.name='chen';
proto.prototype.age=24;
proto.prototype.run = function() {
    return this.name+this.age+'运行中';
};
var box1=new proto();
//假设为box1实例重写name属性
box1.name='jack';//这里的重写并不会影响到原型中的name属性,
alert(box1.name);//这里会按照就近原则来打印 jack
var box2=new proto();
alert(box1.run==box2.run);//true

对上述函数封装优化

function proto(){}
proto.prototype={
    name:'chen',
    age:24,
    run:function(){
        return this.name+this.age+'运行中..';
    }
}
var box1=new proto();
alert(box1.constructor);//Object
//这里box1.constructor应该是指向proto()这个函数而不是Object

解释:面量方式为什么constructor会指向Object?因为Box.prototype={};这种写法其实就是创建了一个新对象。而每创建一个函数,就会同时创建它prototype,这个对象也会自动获取constructor属性。 所以, 新对象的constructor重写了Box原来的constructor, 因此会指向新对象,那个新对象没有指定构造函数,那么就默认为Object。
解决办法就是强制把constructor属性设为proto

function proto(){}
proto.prototype={
    constructor:proto,
    name:'chen',
    age:24,
    run:function(){
        return this.name+this.age+'运行中..';
    }
}
var box1=new proto();
alert(box1.constructor);//proto

②原型模式+构造函数

优点:①解决原型模式无法传参的问题②解决原型模式引用类型实例化共享的问题(需要共享的放在原型中,不需要共享的放在构造函数中)
缺点:①如果实例化多次原型中的方法会执行多次

function Box(name,age){
    this.name=name;
    this.age=age;
}
Box.prototype={
    constructor:Box,
    run:function(){
        return this.name+this.age+'运行中...';
    }

}

对Box进行三次实例化,然后分三次打印run方法,可以发现实例化多少次,run方法就会执行多少次。这样的执行方式对我们来说没有必须要,对性能也会有影响

function Box(name,age){
    this.name=name;
    this.age=age;
}
Box.prototype={
    constructor:Box,
    run:function(){
        alert('我在执行');
        return this.name+this.age+'运行中...';
    }

}
var box1=new Box('chen',24);
var box2=new Box('tian',12);
var box3=new Box('meimei',23);
alert(box1.run());
alert(box2.run());
alert(box3.run());

③动态原型模式(该模式就是原型模式+构造函数的封装优化后的一种模式)

优点:①解决**原型模式+构造函数**run方法多次执行的问题

function Box(name,age){
    this.name=name;
    this.age=age;
    if(typeof this.run !='function'){
        Box.prototype.run = function() {
            return this.name + this.age + '运行中...'
        };
    }
}

④寄生构造函数(工厂模式+构造函数)

function Box(name,age){
    var obj=new Object();
    obj.name=name;
    obj.age=age;
    obj.run=function(){
        return this.name+this.age+'运行中...';
    }
    return obj;
}

⑤稳妥构造函数

稳妥构造函数其实就是寄生构造函数,与寄生构造函数不同的是,在函数体内不用this,在实例化的时候不用new

function Box(name,age){
    var obj=new Object();
    obj.name=name;
    obj.age=age;
    obj.run=function(){
        return name+age+'运行中...';
    }
    return obj;
}
var box1=Box('chen',24);

三、6种继承模式

①原型链继承

缺点:①不能像超类型传参②包含引用类型的原型属性会被所有实例共享

function Box(){
    this.name='chen';
}
function Desk(){
    this.age=24;
}
function Table(){
    this.level = 'AAAAA';
}

Desk.prototype=new Box();
Table.prototype=new Desk();
var box=new Box();
alert(box.constructor);//指向Box

var desk=new Desk();
alert(desk.constructor);//指向Box
alert(desk.name);//chen
alert(desk.age);//24

var table=new Table();
alert(table.constructor);//指向Box
alert(table.name);//chen
alert(table.age);//24
alert(table.level);//AAAAA

//子类型从属于自己或者他的超类型
alert(desk instanceof Desk);
alert(desk instanceof Box);
alert(box instanceof Desk);

被继承的函数叫做超类型(父类,基类),继承的函数叫做子类型(子类,派生类)

②借用构造函数继承(也叫对象冒充继承)

优点:①解决原型链继承无法传参的问题②解决原型链继承引用类型实例化共享的问题
缺点:原型中的属性和方法不会被共享

function Box(name,age){
    this.name=name;
    this.age=age;
    this.family = ['哥哥','姐姐','妹妹'];
}
Box.prototype.run=function(){
    return this.name+this.age+'运行中...';
}
function Desk(name,age){
    Box.call(this,name,age);
}

//下列代码可证明引用类型,放在构造里就不会被共享 
var desk = new Desk('Lee', 100);
alert(desk.family);
desk.family.push('弟弟');
alert(desk.family);

var desk2 = new Desk('Lee', 100);
alert(desk2.family);

alert(desk2.run());//对象冒充,对象冒充只能继承构造里的信息,原型里的方法和属性不能继承

③组合继承(原型链继承+借用构造函数继承)

这种方法使用的次数比较多
缺点:超类型在使用的过程中会被调用2次

function Box(name,age){
    this.name=name;
    this.age=age;
    this.family = ['哥哥','姐姐','妹妹'];
}
Box.prototype.run=function(){
    return this.name+this.age+'运行中...';
}
function Desk(name,age){
    Box.call(this,name,age);//用call来继承Box构造函数中的属性
}
Desk.prototype=new Box();//用Desk的原型来继承Box函数中的原型方法

Box.call(this,name,age)这里是第一次调用
new Box()这里是第二次调用

④原型式继承(本质就是原型链继承,只是中间多了一个中转函数)

优点:这种继承借助原型并基于已有的对象创建新对象,同时还不必因此创建自定义类型

function obj(o){
    function F(){}
    F.prototype=o;//这里相当于F.prototype=new Object()也就是组合继承中的Desk.prototype=new Box()
    return new F;
}
var box = {
    name : 'Lee',
    arr : ['哥哥','妹妹','姐姐']
};

//box1就等于new F()
var box1 = obj(box);

alert(box1.family);
box1.family.push('弟弟');
alert(box1.family);

var box2 = obj(box);
alert(box2.family);//引用类型的属性共享了

⑤寄生式继承(原型式继承+工厂模式)在组合继承的模式上又增加一层中转函数

缺点:
1. 和原型式继承一样会有引用类型共享的问题
2. 使用寄生式继承来为对象添加函数会由于不能做到函数复用而降低效率这一点与构造函数类似

function obj(o){
    function F(){}
    F.prototype=o;
    return new F;
}
function creat(o){
    var f=obj(o);
    f.run=function(){
        return this.name+this.age+'运行中';
    }
    return f;
}

⑥寄生组合式继承

function obj(o){
    function F(){}
    F.prototype=o;
    return new F;
}
function creat(box,desk){
    var f=obj(box.prototype);
    f.run=function(){
        return this.name+this.age;
    }
    desk.prototype=f;
}
第六章 JavaScript 编程技术教案 结合具体数据类型实例,讲解不同数据类型(undefined、null、Boolean、Number、String)的定义、特点与相互转换方法,现场编写代码演示数据类型转换函数(如 Number()、parseInt()、toString())的使用,让学生动手实践,输入不同数据,观察转换结果。以计算阶乘的函数为例,详细讲解函数定义语法(function 关键字、参数列表、函数体)、调用方式(传参与返回值处理),现场演示函数的封装与复用过程,引导学生修改函数参数,观察函数输出变化,理解函数参数传递机制。 阅读详情

相关推荐

《软件工程与实践》 |(一)软件工程基础概述 知识梳理

系列索引:《软件工程与实践》第三版 软件工程课程知识梳理 本章目录: 系列索引:《软件工程与实践》第三版 软件工程课程知识梳理 本章目录: 本章重难点: 1.1 软件工程的发展 1.1.1 软件危机概述 1.1.2 软件工程的发展过程 1.2 软件及软件工程概述 1.2.1 软件的概念特点和分类 1.2.2 软件工程的概念、特点和目标 1.2.3...

12 26 25 的博客 7613

javascript 基础练习题及答案(六)

一、单选题(共30题,每题2分) 1.不属于同源策略限制条件的 A 端口 B 协议 C 域名 D 网址 正确答案: D 2.不属于常见23种设计模式 A 单例 B MVC C 观察者 D 策略 正确答案: B 3.有代码 function Foo(){}; var foo = new Foo(); 下列表达式运算结果为true的选项为 A Foo.prototype == Foo.proto B foo.prototype == Foo.proto C foo.proto == Foo

Hi_Eleven的博客 8280

【JS】你一定要搞懂的原型链

在JavaScript中,每个对象都有一个原型(prototype),它是一个对象,包含可共享的属性和方法。当你访问一个对象的属性或方法时,如果该对象自身没有该属性或方法,JavaScript就会查找该对象的原型,以查看是否存在该属性或方法。如果存在,它就会使用该属性或方法。如果原型的原型也不存在该属性或方法,JavaScript将继续查找原型链,直到找到该属性或方法或者到达原型链的末尾。

m0_62360527的博客 925

HTML 二阶段考试

一、单选题(共30题,每题2分) 1.闭包的好处说法不对的 A缓存变量 B防止命名冲突 C可能造成内存泄露 D少内存使用率 正确答案:D 2.不属于同源策略限制条件的 A端口 B协议 C域名 D网址 正确答案:D 3.ES5中不能实现继承的关键字 Aprototype Bcall Capply Dextends 正确答案:D 4.alert(username);var username="leson";结果为 A...

LITRE_HUI的博客 2766

高效爬取懂车帝车型数据:从静态解析到动态反爬实战

本文详细解析了如何高效爬取懂车帝车型数据,从静态HTML解析到动态接口反爬的完整实战路径。文章重点介绍了使用浏览器开发者工具定位数据、应对CSS混淆与参数加密等反爬策略,并提供了整合静态与动态抓取逻辑的Python代码示例,帮助开发者稳健地获取结构化车型信息。

wind6的博客 937

超速U盘选购避坑指南:如何通过Rx Detect机制识别真伪USB3.0设备

本文深入解析了USB 3.0超速U盘的选购避坑要点,重点介绍了通过Rx Detect机制识别真伪设备的核心原理。文章提供了从软件检测到实际性能测试的完整方案,帮助消费者和技术人员有效辨别虚假的USB3.0设备,确保获得真正的超速传输体验。

weixin_29189373的博客 443

JS-jQuery练习题面试题

ES5中不能实现继承的关键字 A prototype B call C apply D extends 正确答案: D extends //属于ES6 不属于常见23种设计模式 A 单例 B MVC C 观察者 D 策略 正确答案: B 有代码 var obj1={ a:[1], b:1 }; var obj2={ a:[2], c:2 }; var obj = Object.assign(obj1,obj2); 运行之后obj的结果为 A {a:[1],b:1}.

珎珎啊 2310

Ubuntu22环境下Xinference与RAGFLOW集成:构建高效rerank模型服务【实战指南】

本文详细介绍了在Ubuntu22.04系统上,通过部署Xinference模型推理服务来加载bge-reranker-base等rerank模型,并将其与RAGFLOW框架集成的完整实战指南。该方案实现了模型服务的解耦与灵活管理,有效提升RAG系统的检索精度与答案相关性,并提供了从环境配置、服务启动、网络连接到性能调优及常见问题排查的全流程解决方案。

pluto的博客 500

js试题及答案(2)

一、单选题(共30题,每题2分) 1.闭包的好处说法不对的 A 缓存变量 B 防止命名冲突 C 可能造成内存泄露 D 减少内存使用率 解析: 无 2.不能进行强制类型转化的为 A parseInt B parseFloat C Number D Math.floor 正确答案: D 3.alert(username);var username=“leson”;结果为 A undefined B leson C null D 报错 正确答案: A 解析: 变量提升,预解析 4.不属于常见23种设计模式 A 单

szmtjs10的博客 3448

SuperPoint与SuperGlue的C++ TensorRT工程化实战:从理论到部署的完整指南

本文详细介绍了如何将SuperPoint和SuperGlue算法通过C++和TensorRT进行工程化部署,从模型准备、格式转换到TensorRT引擎构建和C++推理实现。通过性能优化技巧和实际应用案例,展示了在边缘设备上实现实时特征匹配的完整流程,显著提升处理速度与效率。

weixin_42537831的博客 160

Cocos Creator+微信小游戏:如何用wxDownloader实现资源动态加载与热更新

本文深入探讨了在Cocos Creator开发微信小游戏时,如何利用wxDownloader有效应对主包体积限制,实现资源的动态加载与热更新。文章详细介绍了从项目配置、资源标记到初始化加载的完整流程,并重点解析了基于MD5 Cache的缓存策略与版本控制方案,旨在帮助开发者构建稳健高效的资源管理体系,优化游戏启动速度与更新体验。

css33的专栏 822

jquery级试题_JS-jQuery练习题面试题

ES5中不能实现继承的关键字A prototypeB callC applyD extends正确答案: D extends //属于ES6不属于常见23种设计模式A 单例B MVCC 观察者D 策略正确答案: B创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,...

weixin_39620943的博客 1543

RU.EXE实用指南:从基础操作到高级调试技巧

本文是RU.EXE(RW Everything)的实用指南,详细介绍了这款硬件调试工具从基础操作到高级技巧的全过程。文章阐述了RU.EXE作为直接读写硬件寄存器、内存和PCI配置空间的强大工具,如何帮助硬件工程师和开发人员高效进行底层系统调试与故障排查,并强调了安全操作的重要性。

weixin_29228203的博客 278

JavaScript 分阶段完整学习路线

本文系统梳理了JavaScript从入门到进阶的全栈学习路径,分为6个阶段:基础语法→函数与ES6→异步编程→DOM/BOM→原型与高级特性→网络/Node/工程化。每个阶段明确标注核心知识点(变量、闭包、Promise、原型链等)、重难点解析及配套手写练习题(防抖节流、深拷贝、Promise实现等),强调必须掌握事件循环、this指向等面试高频考点。学习周期约3个月,建议按顺序扎实掌握原生JS底层原理后再接触框架,特别注重理论结合实践,通过手写代码巩固核心概念。

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 264

到底什么是Harness工程?一篇文章从入门到企业落地全解析

随着OpenClaw爆火,Harness Engineering(驾驭工程)成为AI编程时代的热门概念,很多小白对其感到陌生。本文用通俗类比和真实案例,避开复杂术语,从基础定义入手,讲清Harness Engineering的核心逻辑——人类工程师设计“约束系统”(马具),让AI模型(烈马)安全高效地完成代码工作,同时拆解其核心组件、企业落地场景和实战成果,帮小白快速入门,读懂这项能解放人力、提升效率的新技术,轻松掌握它的核心价值和落地思路。

program哲学 3259

【RV1126/RV1109学习笔记】#基础篇#(2)基础入门使用

一、调试方式 1、串口调试 2、ADB调试 3、网络调试 二、基础外设使用 音频使用(aplay,arecord,amixer) 三、WIFI连接 四、屏幕背光控制

丨晋丨 1856

UML2面向对象分析与设计期末复习知识点

UML2期末复习总结-----看完不过!你找我!(( ‵o′)) PS:只是知识点总结,还是要看书的。 PS:未经作者允许,严禁转载。违者后果自负。 撰写人:Echo 时间:2020年12月29日16:28:09 UML2分值分布 选择题:10个---------------------------20分 填空题:20个---------------------------20分 简答题:5个-----------------------------30分 应用题:3个-------------------

SlientJkoer的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

js原型和原型链_你需要了解的JS原型链

JS中的原型链相关内容是学习JS语法的一大重难点,学好这部分内容对于理解JS面向对象机制是很有帮助的。下面笔者从几个方面来详细阐述原型链相关的内容。神秘的链接JS中的每一个对象都有一个私密的属性,它用来连接到该对象的原型对象,在chrome等浏览器,它被实现为__proto__(这里是两个下划线・_・),所有除null以外的对象都有自己的__proto__属性。prototype属性这个对象属性相...

weixin_39608559的博客 64

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

代码类型与错误类型+对象与原型

JS进阶Ⅱ 今日份重难点:① this ; ② 类与对象 。 同步代码与异步代码 简单来说: 同步代码:代码的执行顺序与代码的书写顺序一样,由上至下。 异步代码:代码的执行顺序与代码的书写顺序不一样,遇到异步代码浏览器会忽略,直到满足某些条件才会执行这些代码。 不同于JAVA,JS是一门单线程语言。在JS代码中,95%以上的代码都是同步代码,而异步代码仅仅是个别:事件、定时器、ajax等。 <button>一</button> <button>二</bu

Alex_mishi的博客 618

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

前端学习记录~2023.7.30~JavaScript重难点实例精讲~第4章 对象

本章是第四章对象相关的内容。JavaScript虽然是一门弱类型语言,但它同样是一门面向对象的语言,严格来说它是一门基于原型的面向对象的语言。对象的属性和访问方式创建对象对象拷贝原型对象继承instanceof 运算符这个是实现深拷贝最好的方式,刚才提到的问题全部可以解决。在自定义实现深拷贝时,需要针对不同的数据类型做针对性的处理,因此我们会先实现判断数据类型的函数,并将所有函数封装在一个辅助类对象中,这里用“_”表示(类似于underscore类库对外暴露的对象)/**

Viator_mp3的博客 1362

ES6从入门到精通:重难点

摘要:ES6核心特性包括块级作用域(let/const)、箭头函数、解构赋值、模板字符串、模块化、Promise异步处理、Class语法糖、迭代器与生成器、Proxy与Reflect。重点解析了this绑定、异步控制、模块循环引用等难点,建议使用箭头函数固定this,用async/await优化异步流程,避免循环依赖。同时指出深度克隆需特殊处理,装饰器仍处提案阶段。这些特性显著提升JavaScript开发效率与代码质量。(150字)

m0_71963731的博客 531

【C++】面试:面向对象与多态

本文系统梳理了C++面向对象编程的核心知识点,主要涵盖以下重点内容: 类与对象基础:类与对象概念、成员分类(访问权限/存储属性)、静态成员特性 特殊成员函数:构造函数、拷贝构造、析构函数的特性与调用时机,重点区分拷贝构造与赋值重载的使用场景 拷贝机制:深/浅拷贝的本质区别及实现方式,解决指针成员的内存管理问题 继承体系:三种继承方式对访问权限的影响,菱形继承问题及虚继承解决方案 多态实现:虚函数原理(虚函数表/虚表指针)、动态多态三要素、虚析构的必要性 抽象类与接口:纯虚函数定义、抽象类规则及其在接口设计中

DevFrank的博客 466

JS编程范式 \& 面向对象范式

JavaScript作为多范式编程语言,同时支持过程式、声明式、函数式和基于原型的面向对象编程四大范式。过程式强调步骤化执行,声明式关注结果而非过程,函数式以函数为核心单元。JS采用基于原型的OOP范式,通过对象克隆和原型链实现继承,与基于类的OOP在对象创建、继承机制等方面存在本质差异。虽然ES6引入class语法,但底层仍是原型机制。JS的核心特性包括:多范式兼容、原型链继承、动态灵活的对象结构,以及运行时修改原型的全局联动效果。这些特性使其成为一门独特的动态语言。

一直在奋起,一直在路上 254

第一章.无处不在的js js复习总结

一.无处不在的js 1.0前言 本章包含以下内容 Javascript核心语言特性 Javascript引擎核心要素 Javascript开发中的3个最佳实践 MVC(Model- View - Controller ----模型 - 视图 - 控制器) 1.1理解js 函数是一等公民(一级对象) 函数闭包 作用域 基于原型的面向对象————不同于其他主流的面向对象语言(例如 c# , java , Ruby) 使用基于类的面向对象, Javascript 使用基于原型的面向对象。正是如此

J_aSON_的博客 264

web网页开发,你必须知道的CSS盒模型,重难点整理

标准文档流 标准文档流,指的是元素排版布局过程中,元素会默认自动从左往右,从上往下的流式排列方式。前面内容发生了变化,后面的内容位置也会随着发生变化。 HTML就是一种标准文档流文件 HTML中的标准文档流特点通过两种方式体现: 微观现象 元素等级 面试准备 1)准备面试简历: 个人基本信息:如姓名、年龄、联系电话、邮箱,专业,学校等 工作经历:包括工作时间、公司、岗位、职责、技术栈、突出业绩等。 对工作理解和掌握情况:说明每个技能点是了解、熟悉、熟练使用、还是精通的水平。精准定位应聘岗位任职要求。

m0_57205780的博客 199

C/C++重难点总结系列(五)

41.C++文件流操作 多态性:fstream继承自iostream,ifstream继承自istream,ofstream继承自ostream,因此参数为iostream的引用/指针的可以直接传入fstream的实参。 操作步骤:创建文件流,打开文件,读写文件,关闭文件。 操作示例: char data[100]; // 以写模式打开文件 ofstream outfil

Ctrlturtle的博客 1658
上一篇: 面向对象与原型三
下一篇: 面向对象与原型原稿
chentian888
博客等级 码龄11年 16粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值