【JavaScript】——“重学前端”03对象——JavaScript需要模拟面向对象吗

运动控制中的编码器信号优化:滤波技术实战解析 本文深入解析运动控制系统中编码器信号的滤波技术优化方案。从硬件RC低通滤波器参数计算到软件卡尔曼滤波算法实践,详细介绍了如何有效抑制传导干扰、辐射干扰和机械振动带来的信号噪声。通过半导体设备升级案例,展示了三级混合滤波架构如何将位置检测精度提升至±0.8μm,为工程师提供了一套完整的信号优化方法论。 阅读详情

JavaScript 本身就是面向对象的,这些“模拟面向对象”,实际上做的事情就是“模拟
基于类的面向对象
”。

JavaScript 创始人 Brendan Eich 在“原型运行时”的基础上引入了 new、this 等语言特性,使之“看起来语法更像 Java”,而 Java 正是基于类的面向对象的代表语言之一。

在不同的编程语言中,设计者也利用各种不同的语言特性来抽象描述对象。
1、最为成功的流派是使用“类”的方式来描述对象,这诞生了诸如 C++、Java 等流行的编程
语言。这个流派叫做基于类的编程语言。

2、还有一种就是基于原型的编程语言,它们利用原型来描述对象。我们的 JavaScript 就是其中代表。

“基于类”的编程: 

“基于类”的编程提倡使用一个关注分类和类之间关系开发模型。在这类语言中,总是先有
类
,再从类去实例化一个对象。类与类之间又可能会形成继承、组合等关系。类又往往与语
言的类型系统整合,形成一定编译时的能力。

“基于原型”的编程:

“基于原型”的编程看起来更为提倡程序员去关注一系列对象实例的行为,而后才去关心如何将这些对象,划分到最近的使用方式相似的原型对象,而不是将它们分成类。

基于原型的面向对象系统通过“复制”的方式来创建新对象。

一些语言的实现中,还允许复制一个空对象。这实际上就是创建一个全新的对象。

原型系统的“复制操作”有两种实现思路:

        1、一个是并不真的去复制一个原型对象,而是使得新对象持有一个原型的引用;
        2、另一个是切实地复制对象,从此两个对象再无关联。
历史上的基于原型语言因此产生了两个流派,显然,JavaScript 显然选择了前一种方式。


JavaScript 的原型:

原型系统可以说相当简单,我可以用两条概括:
        1、如果所有对象都有私有字段 [[prototype]],就是对象的原型;
        2、读一个属性,如果对象本身没有,则会继续访问对象的原型,直到原型为空或者找到为止。

从 ES6 以来,JavaScript 提供了一系列内置函数,以便更为直接地访问操纵原型。三个方法分别为:
        Object.create 根据指定的原型创建新对象,原型可以是 null;
        Object.getPrototypeOf 获得一个对象的原型;
        Object.setPrototypeOf 设置一个对象的原型。

//下面的代码展示了用原型来抽象猫和虎的例子。

//创建一个“猫”对象
var cat = {
     say(){
         console.log("meow~");
     },
     jump(){
         console.log("jump");
     }
}
//根据猫做了一些修改创建了虎
var tiger = Object.create(cat, {
     say:{
         writable:true,
         configurable:true,
         enumerable:true,
         value:function(){
             console.log("roar!");
         }
     }
})

//可以用Object.create 来创建另外的猫和虎对象
//我们可以通过“原始猫对象”和“原始虎对象”来控制所有猫和虎的行为。
var anotherCat = Object.create(cat);

anotherCat.say();

var anotherTiger = Object.create(tiger);

anotherTiger.say();

new操作具体做了哪些事情:

new 运算接受一个构造器和一组调用参数,实际上做了几件事:
        1、以构造器的 prototype 属性(注意与私有字段 [[prototype]] 的区分)为原型,创建新
对象;
        2、将 this 和调用参数传给构造器,执行;
        3、如果构造器返回的是对象,则返回,否则返回第一步创建的对象。

new 这样的行为,它客观上提供了两种方式,

        一是在构造器中添加属性,

        二是在构造器的 prototype 属性上添加属性。

下面代码展示了用构造器模拟类的两种方法:

//第一种方法是直接在构造器中修改 this,给 this 添加属性。
function c1(){
     this.p1 = 1;
     this.p2 = function(){
         console.log(this.p1);
     }
} 
var o1 = new c1;
o1.p2();


//第二种方法是修改构造器的 prototype 属性指向的对象
//它是从这个构造器构造出来的所有对象的原型。
function c2(){
}
c2.prototype.p1 = 1;
c2.prototype.p2 = function(){
     console.log(this.p1);
}

var o2 = new c2;
o2.p2();

ES6 中的类——class:

类的基本写法:

class Rectangle {
     constructor(height, width) {
         this.height = height;
         this.width = width;
     }
     // Getter
     get area() {
         return this.calcArea();
     }
     // Method
     calcArea() {
         return this.height * this.width;
     }
}

我们通过 get/set 关键字来创建 getter,通过括号和大括号来创建方法,数据型成员最好
写在构造器里面。

类提供了继承能力。

//创造了 Animal 类
class Animal {
     constructor(name) {
         this.name = name;
     }
     speak() {
         console.log(this.name + ' makes a noise.');
     }
}

//通过 extends 关键字让 Dog 继承 Animal 
class Dog extends Animal {
     constructor(name) {
         super(name); // call the super class constructor and pass in the name parameter
     }

     speak() {
         console.log(this.name + ' barks.');
     }
}


//调用子类的 speak 方法获取了父类的 name。
let d = new Dog('Mitzie');
d.speak(); // Mitzie barks.

所以当我们使用类的思想来设计代码时,应该尽量使用 class 来声明类,而不是用旧语法,
拿函数来模拟对象。

学术类PPT制作总结 本文分享了科技类PPT的制作技巧,希望相关的信息能帮助到读者。 阅读详情

相关推荐

沐数科技数据开发岗笔试题2025

与数据库中的主键(Primary Key)​有所不同,业务主键(Business Key)​是业务层面的唯一标识,通常由业务规则决定,例如,订单号、订单明细号,身份证号等。用户授信表(table_credit):包含用户ID(uid)、授信申请时间(credit_submit_time_local)、授信状态(credit_status)。:在正态分布中,大约68%的数据值落在距离均值一个标准差的范围内,约95%的数据值落在两个标准差的范围内,而约99.7%的数据值落在三个标准差的范围内。

weixin_40121264的博客 3525

重学前端-总结:07、JavaScript对象:我们真的需要模拟类吗?

重学前端-总结:07、JavaScript对象:我们真的需要模拟类吗? JavaScript 本身就是面向对象的,它并不需要模拟,只是它实现面向对象的方式和主流的流派不太一样,所以才让很多人产生了误会。 什么是原型? JavaScript 并非第一个使用原型的语言,在它之前,self、kevo 等语言已经开始使用原型来描述对象。 原型系统的“复制操作”有两种实现思路: 一个是并不真的去复制一个原...

Brave Soul Blog 2292

5分钟快速验证lvgl界面:VScode模拟器极简配置法(免环境变量版)

本文介绍了一种5分钟快速验证LVGL界面的极简配置方法,使用VSCode模拟器免环境变量配置,适合UI设计师和产品经理快速预览界面效果。通过预编译的SDL2库和配置好的VSCode工程模板,实现开箱即用的LVGL界面验证,大幅提升工作效率。

weixin_30790841的博客 314

重学前端 9 # JavaScript中的对象分类

说明 每天10分钟,重构你的前端知识体系专栏笔记。 一、javaScript对象分类介绍 1.0、宿主对象(host Objects) 由 JavaScript 宿主环境提供的对象,它们的行为完全由宿主环境决定。 1.1、内置对象(Built-in Objects) 由 JavaScript 语言提供的对象。 1.1.0、固有对象(Intrinsic Objects ) 由标准规定,随着 JavaScript 运行时创建而自动创建的对象实例。 1.1.1、原生对象(Native Object

学习前端这门手艺,栈底到栈顶依次是:浏览器架构、Web 网络、事件循环机制、JavaScript 核心、V8 的内存管理、浏览器的渲染流程、Web 安全、CSS、React、Vue、Node、构建工具链等 999

COCO2017数据集类别分布深度解析

本文深入解析了COCO2017数据集的类别分布情况,包括80个常见物体的分类统计和样本数量分析。通过对比训练集与验证集的分布一致性,探讨了数据均衡性问题,并针对高频和低频类别提出了实用的数据预处理和模型训练建议,帮助优化计算机视觉任务的性能。

weixin_42533751的博客 370

DDR4 IP的用户接口

DDR4 IP核用户接口

bowen_wener的博客 1926

【JavaScript】——“重学前端”04对象——对象的分类

JavaScript 中的对象分类:宿主对象:内置对象·固有对象:内置对象·原生对象:用对象来模拟函数和构造器:在固有对象和原生对象中,有一些对象的行为跟正常对象有很大区别:

qq_50497708的博客 650

vivado下ECO操作-不重新综合实现修改属性并生成.bit

ECO即engineer change order,即工程变更指令,可以对设计做局部小改动并只对改动部分重新布局布线并生成.bit。在一个工程动辄编译几个小时情况下,可以在调试中节省大量时间。比如我们在调试中,需要改变时钟占空比或者相位,需要改变寄存器初值等等,此时用ECO暂时改动,待验证后在重新编译无疑是最有效率的方法。 实现ECO通常有两种方式,一是通过vivado界面完成,另一种方法就是tcl脚本。所有的ECO操作都可以通过tcl操作完成,有的操作用vivado界面无法完成,只能通过tcl。以下主要

4657

js 设计模式:面向对象还是基于对象 | 我们真的需要“类“吗?

设计模式 js的类设计模式和委托设计模式 js中基于类、基于原型 构造函数 new 手写new 继承 多态 class语法糖 prototype 继承 我们真的需要类吗 其他模仿类方式 显式伪多态 混入

qq_64036795的博客 201

YOLO26涨点改进 | 全网独家,注意力创新改进篇 | Arxiv2025 | YOLO26引入MSLA多尺度线性注意力模块,高效提取多尺度特征和建模长程依赖,含多种创新改进,助力有效涨点

本文提出了一种多尺度线性注意力模块(MSLA)来优化YOLO26模型。MSLA通过并行使用不同尺寸的深度可分离卷积(3×3至9×9)提取多尺度特征,并结合线性注意力机制高效建模全局依赖关系。该模块显著提升了模型对多尺度目标的检测能力,同时保持了轻量化特性。实验表明,MSLA能有效增强小目标检测和复杂场景下的分割精度。文章详细介绍了MSLA的网络结构、核心优势及实现代码,并提供了两种集成MSLA的YOLO26改进方案,为实时目标检测任务提供了高效解决方案。

Ai缝合怪、助力小伙伴高效发论文 299

AI原生SaaS应用的自动化运维体系构建

随着ChatGPT掀起的AI原生应用浪潮,越来越多SaaS(软件即服务)产品开始以"AI优先"的方式设计——从用户交互到核心功能,都深度依赖机器学习模型(如推荐算法、智能客服)、实时数据流(如用户行为分析)和弹性算力(如大模型推理)。这类应用的运维需求与传统SaaS完全不同:传统运维像"修水管",哪里漏了补哪里;AI原生运维则像"照顾会成长的宠物",需要实时感知模型状态、数据变化和流量波动,主动调整资源。

AI天才研究院 1080

【重学前端】004-JavaScript:我们真的需要模拟类吗

早期的 JavaScript 程序员一般有过使用 JavaScript **“模拟面向对象”**的经历;实际上,JavaScript 本身就是正统的面向对象语言!描述对象的方式 = 基于类(Java等) + 基于原型(JavaScript等);基于类的描述方式更成功,导致人们错误地认为这样的方式才是面向对象。由于公司的一些政治原因,JavaScript 在推出之时,被要求去模仿 Java ,因此有了 、等语言特性,使其看起来更像 Java !ES6 提供了 这个关键字来定义类,尽管其仍然是基于原型运行时系

訾博(ZiBo)的博客 322

化工过程设计软件:Aspen Plus二次开发_(2).二次开发概述

假设我们需要创建一个自定义的换热器模型,该模型能够计算两个物流之间的热交换量,并根据传热系数和换热面积进行调整。ACM 模型代码示例!自定义换热器模型!参数:传热系数 U (W/m^2·K)!换热面积 A (m^2)!热物流 T_hot_in (K), T_hot_out (K), F_hot (kmol/h)!冷物流 T_cold_in (K), T_cold_out (K), F_cold (kmol/h)!模型输入!U - 传热系数!A - 换热面积!

kkchenjj的博客 370

重学前端-学习笔记-JavaScript对象-类

说明 重学前端是程劭非(winter)在极客时间开的一个专栏,在此主要整理我的学习笔记。如有侵权,请联系我,谢谢。 js的原型 如果所有对象都有私有字段[[prototype]],就是对象的原型 读一个属性,在该对象上找不到,就会去它的原型上查找,直到原型为空或者找到为止 js提供内置函数,来访问和操纵原型 Object.create:根据指定的原型来创建新对象,原型可以是null Ob...

weixin_33834137的博客 216

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

重学前端-总结:08、JavaScript对象:你知道全部的对象分类吗?

文章目录重学前端-总结:08、JavaScript对象:你知道全部的对象分类吗?JavaScript 中的对象分类宿主对象内置对象·固有对象内置对象·原生对象用对象来模拟函数与构造器:函数对象与构造器对象特殊行为的对象总结 重学前端-总结:08、JavaScript对象:你知道全部的对象分类吗? JavaScript 中的对象分类 我们可以把对象分成几类。 宿主对象(host Objects)...

Brave Soul Blog 659

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JavaScript 对象:我们真的需要模拟类吗?

关注公众号前端开发博客,回复“加群”加入我们一起学习,天天进步作者|程劭非来源|极客时间《重学前端》专栏早期的 JavaScript 程序员一般都有过使用 JavaScript“模拟面...

前端开发博客 227

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

winter重学前端——训练营预习课

重学前端读书笔记模块一javascriptjavascript 类型javascript对象 模块一 javascript javascript 类型 javascript类型有以下几种: Undefined;Null;Boolean;String;Number;Symbol;Object。 为什么有的编程规范要求用 void 0 代替 undefined? Undefined 类型表示未定义,它的类型只有一个值,就是 undefined。任何变量在赋值前是 Undefined 类型、值为 undefine

yfm120750310的博客 930

重新认识JavaScript中的面向对象

本文系读完winter《重学前端》相关章节并查阅相关文档后的学习总结,特此声明和感谢。 误解 以前总觉得JavaScript中的面向对象是一团乱麻,各种原型和类的概念交织错乱,读过的一些书(如《你不知道的JavaScript》)也对JavaScript中类的写法嗤之以鼻以至于不推荐使用新的class关键字。种种现象让我过去很长一段时间都认为JavaScript是一门设计得很差劲的语言,所谓的面...

weixin_33836874的博客 109

重学前端笔记(六)-JavaScript中的对象分类

JavaScript中的对象分类 在浏览器环境中,我们无法单纯依靠JavaScript代码实现div对象,只能靠document.createElement来创建。说明了JavaScript的对象机制并非简单的属性集合+原型。 日常工作中,接触到的主要API,几乎都是由今天所讲解的这些对象提供的。理解这些对象的性质,我们才能真正理解我们使用的API的一些特性。 我们可以把对象分成几类。 宿主对象...

hen1183392934的博客 435

Keil MDK找不到ARM Compiler 5.06?AC5下载安装配置全攻略

在嵌入式开发中,编译工具链的配置往往比写代码更让人头疼。很多开发者升级Keil MDK或打开老工程时,会遇到“Target uses ARM-Compiler 'V5.06 update 7' which is not available”的报错,这本质上是ARM编译器版本迭代导致的兼容性问题。从MDK 5.37开始,官方默认不再集成经典的AC5编译器,而大量基于标准外设库和第三方静态库的老工程却离不开它。理解编译器工作原理、掌握工具链的安装与路径配置,是解决这类问题的关键。本文从AC5与AC6的技术差异出

weixin_33770878的博客 359

重学前端

winter在手机淘宝一直负责前端工程师的面试与培养工作,他深知其中的痛点与难点。在这个专栏中,winter将带你告别零散和盲目的自学,重新学习前端,一起搭建前端知识框架,共同明确学习重点,精进前端技术。 告别零散技术点,搭建前端知识体系; 打通JS、HTML、CSS、浏览器4大脉络; 40+前端难点完全解答; 大厂前端工程实战演练。 课程目录: 开篇词+学习路线+架构图 (3讲) 开篇词...

ygunoil的博客 95

【笔记】重学前端-winter

本文为:winter 发布在极客时间 【重学前端】系列课程的的笔记和总结支持正版哦: https://time.geekbang.org/col... 导语 如果深入进去了解,你会发现,表面上看他们可能是一时忘记了,或者之前没注意但实际上是他们对于前端的知识体系和底层原理没有真正系统地理解 前端学习方法:一是立足标准,系统性总结和整理前端...

weixin_34179762的博客 1053

重学前端学习笔记--JavaScript类与原型

四、JavaScript类 JavaScript本身就是面向对象的,所以它并不需要模拟面向对象,只是它面向对象的方式不是通过类,而是基于原型系统来面向对象。也即是JavaScript是一个基于原型的编程语言。 (一)那既然如此,什么是原型呢? 1.基于原型的编程更关注对象实例的行为,然后才去关心如何将这些对象划分到使用方式相似的原型对象,而不是将它们进行分类。 2.基于原型的对象系统...

梁婉玲krysliang的博客 332

重学JavaScript

JavaScript之再深入,来自B站小野老师的视频

weixin_59820248的博客 1202

重学前端学习笔记(五)-JavaScript原型

JavaScript原型 中文中有个成语叫做“照猫画虎”,这里的猫看起来就是虎的原型。 最为成功的流派是使用“类”的方式来描述对象,这诞生了诸如 C++、Java等流行的编程语言。这个流派叫做基于类的编程语言。 还有一种就是基于原型的编程语言,它们利用原型来描述对象。我们的JavaScript就是其中代表。 基于类/基于原型 “基于类”的编程提倡使用一个关注分类和类之间关系开发模型。在这类语言中,...

hen1183392934的博客 223

重学JavaScript系列之一_引用类型

重学JavaScript系列之一_引用类型 ECMAScript中,引用数据是一种数据结构,用于将数据和功能组织在一起,有时候被称为类 ES6中使用Class定义一个类 引用类型的值(对象)是引用类型的一个实例 对象是某个特定引用类型的实例,新对象是使用new操作符跟后面的一个构造函数来创建的,构造函数本身就是一个函数,只不过是处于创建新对象的目的而定义的,如下,创建一个Person类...

weixin_34235371的博客 81
上一篇: 【JavaScript】——“重学前端”02对象——面向对象还是基于对象
下一篇: 【JavaScript】——“重学前端”04对象——对象的分类
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值