JS—对象的深入
目录前言创建对象方式二读取对象枚举变量属性区分变量和属性函数和方法this初印象创建对象方式三创建对象方式四注意三个特点构造函数new关键字的执行流程构造函数的弊端对象的实例化instanceof原型对象原型对象的作用检查对象中是否含有某个属性创建对象方式五垃圾回收GC)前言在上一节对象初相识我们学习了使用new Object来创建对象这是第一种创建方式适用场景不太清楚后期添加什么属性和方法接下来我们将学习其他四种创建方式其中几种是我们后期更加常用且方便的。创建对象方式二利用字面量创建对象var obj {}//创建一个空对象 new Object() var obj2 { name: 猪八戒, age: 28, gender: 男, sayHi: function () { console.log(方法写法二匿名函数); }, say() { console.log(方法写法五es6简写方法); }, };适用场景对象创建时就知道有什么属性和方法注意对象内的属性或者方法我们采取键值对的形式键:值属性名属性值多个属性或者方法中间用逗号隔开最后一个属性或者方法逗号可以省略读取对象调用对象的属性 对象名.属性名对象名[属性名]调用对象的方法 对象名.方法名//读取对象属性 console.log(obj2.name); console.log(obj2[age]); //读取对象方法 obj.sayHi()枚举变量属性使用for...in语句语法for(var 变量 in 对象){}作用对象中有几个属性循环体就会执行几次每次执行时会将对象中的一个属性的名字赋值给变量var obj { name: 孙悟空, age: 18, gender: 男, address: 花果山, say() { console.log(老孙来也); }, }; for (let k in obj) { console.log(obj[k]);//通过变量k读取属性值 []读取变量 } obj.say();区分变量和属性函数和方法变量和属性都是用来存储数据的变量是单独声明并赋值使用的时候直接写变量名是单独存在的属性在对象中不需要使声明使用时也是对象.属性依托对象存在的函数和方法都是用来实现某种功能的可以做某件事但函数是单独存在的方法是依托对象存在的this初印象解析器在调用函数每次都会向函数内部传递一个隐含的参数这个隐含的参数就是this,this是参数浏览器传输的直接拿来用的this指向的是一个对象这个对象我们称为函数执行的上下文对象。根据函数的调用方式的不同this会指向不同的对象:1:当以函数的形式直接调用时this是window2:当以方法的形式调用时 谁调用方法,this就是谁3:当以构建函数的形式调用时this就是新创建的那个对象this就是当前对象我们找的this就是当前作用域取值范围后面讲到构造函数时用到的创建对象方式三使用工厂方法创建对象通过该方法可以大批量的创建对象function createPer(name, age) { let per { //new Object() name: name,//name age, say() {//new Function(),开辟了一个新的空间用来放say函数 console.log(hello); }, }; return per; //返回创建的对象让函数外部拿到结果 } // 函数外部拿到结果 let per1 createPer(jack, 18); //在控制台输出 // console.log(per1); let per2 createPer(tom, 19); //页面写入 // document.writeln(per2); let per3 createPer(dana, 20); //弹出 let per4createPer(来福,2) // alert(per3); console.log(per1); console.log(per2); console.log(per3); console.log(per4);问题使用工厂方法创建的对象使用的构造函数都是Object所以创建的对象都是Object这个类型就导致我们无法区分多种不同类型的对象创建对象方式四利用构造函数来创建对象构造函数是一种特殊的函数主要用来初始化对象即为对象成员变量赋值初始值它综合new运算符一起使用。我们可以把对象中一些公共属性和方法抽取出来然后封装到这个函数里面构造函数语法规范function 构造函数名(){ this.属性值 this.方法function(){} } new 构造函数名();function Person(name, age, gender) { //alert(this);//this就是新建的对象然后赋值给per this.name name; this.age age; this.gender gender; this.sayName function () { alert(this.name) }; } var per new Person(孙悟空, 18, 男); var per2 new Person(玉兔精, 16, 女); var per3 new Person(沙和尚, 28, 男); console.log(per); console.log(per2); console.log(per3);注意三个特点构造函数就是一个普通的函数创建方式和普通函数没有区别不同的是构造函数习惯上首字母大写构造函数和普通函数的区别就是调用方式的不同 普通函数是直接调用构造函数需要使用new关键字来调用构造函数创建属性和方法必须结合this使用此时的this就是新创建的那个对象构造函数new关键字的执行流程a:立刻创建一个新的对象b:将新建的对象设置为函数中this在构造函数中可以使用this来引用新建的对象c:逐行执行函数中的代码d:将新建的对象作为返回值返回new一个对象时会在堆中开辟一片区域new Person()会在堆中开辟一块区域构造函数的弊端将函数定义在全局作用域污染了全局作用域的命名空间而且定义在全局作用域中也很不安全优化方法是在构造函数内部创建也就是构造函数每执行一次就会创建一个新的sayName方法但所有实例的sayName都是唯一的这样就导致了构造函数执行一次就会创建一个新的方法执行一万次就会创建一万个新的方法而这一万个对象都是一样的这是没有必要的完全可以使所有的对象共享同一个方法对象的实例化使用同一个构造函数创建的对象我们称为一类对象也将一个构造函数称为一个类例如明星汽车设计图纸我们将通过一个构造函数创建的对象称为该类的实例例如刘德华、某一辆宝马车我们利用构造函数创建对象的过程我们也称为对象的实例化instanceof使用instanceof可以检查一个对象是否是一个类的实例语法对象 instanceof 构造函数如果是则返回true否则返回false所有的对象都是Object的后代所以任何的对象和我们的instanceof 检查时都是true原型对象我们所创建的每一个函数解析器都会向函数中添加一个属性prototype,这个属性对应着一个对象这个对象就是我们所谓的原型对象(prototype是属性名它的值是一个对象这个对象叫原型对象),默认情况下它是一个空对象如果我们的函数作为普通函数调用prototype没有任何作用原型对象的作用原型对象就相当于一个公共的区域所有同一个类的实例都可以访问到这个原型对象我们可以将对象中共有的内容统一设置到原型对象中当我们访问对象的一个属性或方法时它会先在对象自身中寻找如果有就直接使用如果没有就去原型对象中寻找然后使用。以后我们创建构造函数时可以将这些对象共有的属性和方法统一添加到构造函数中这样就不用分别给每一个对象添加也不会影响到全局作用域就可以使每个对象都具有这样的属性和方法了/* 需求创建一个Person类在原型对象上添加属性a以及添加一个sayHello方法 */ function Person(name, age) { this.name name; this.age age; } Person.prototype.a 1; // 此时这个sayHello方法就没有放在全局了而是放在Person构造函数的原型对象上 Person.prototype.sayHello function () { console.log(hello); }; // 实例对象都可以使用构造函数原型对象上的属性和方法 let per1 new Person(jack, 18); let per2 new Person(jack, 18); console.log(per1.a); per1.sayHello();检查对象中是否含有某个属性in检查某个属性是否属于某个对象时先在自身找找不到则会往这个对象的类的原型对象上找找到也会返回true 这样就会导致有歧义可以使用对象的hasOwnProperty()来检查对象自身中是否含有该属性,使用该方法只有当对象自身中含有属性时才会返回true创建对象方式五JavaScript 语言中生成实例对象的传统方法是通过构造函数ES6 提供了更接近传统语言的写法引入了 Class类这个概念作为对象的模板。通过class关键字可以定义类。最好用的方式// es6实现 class方法实现 class PersonN { //构造方法 constructor名字不能修改 // 当我们new实例对象的时候这个方法自动执行 constructor(username, password) { this.username username; this.password password; } //方法必须使用该语法, 不能使用 ES5 的对象完整形式 getstr() { console.log(用户名 this.username 密码 this.password); } //ES5 的对象完整形式 报错 // getstr:function () {} } const pn1 new PersonN(123456, 789012); pn1.getstr();说明使用class关键词 声明类constructor为构造方法constructor()方法可以接收参数更新类的静态属性如果没有显式定义一个空的constructor()方法会被默认添加this关键字则代表实例对象getstr()为普通方法不要用es5完整写法getstr()存在 prototype上。pn1.constructor pn1.prototype.constructor // true垃圾回收GC)就像人生活时间长了会产生垃圾一样程序运行过程中也会产生一些垃圾这些垃圾积攒过多以后会导致程序运行的速度过慢所以我们需要一个垃圾回收的机制来处理程序运行过程中产生的垃圾当一个对象没有任何的变量或者属性对它进行引用此时我们将永远无法操作该对象此时这种对象就是一个垃圾这种对象过多会占用我们大量的内存空间导致我们程序运行变慢这种垃圾我们必须清理在JS中拥有自动的垃圾回收机制会自动将这些垃圾对象从内存中销毁我们不需要也不能进行垃圾回收我们需要做的只是将不再使用的对象设置null即可var objnew Object(); //对对象进行各种操作 obj.prototype123; console.log(obj.prototype) objnull;

相关新闻

基于深度学习与计算机视觉的高精度表格识别技术,精准识别复杂表格结构,自动输出结构化数据

基于深度学习与计算机视觉的高精度表格识别技术,精准识别复杂表格结构,自动输出结构化数据

在传统财务工作中,面对成百上千份格式各异的银行对账单、资产负债表和税务申报表,人工录入不仅效率低下,还极易引入错误。如何从非结构化或半结构化的纸质/电子文档中快速、准确地提取表格数据,成为企业财务数字化转型的关键瓶颈。…

2026/7/8 10:24:07 阅读更多 →
专业服务深耕:电商智能客服与AI客服机器人重构日用品行业服务价值

专业服务深耕:电商智能客服与AI客服机器人重构日用品行业服务价值

一、行业核心矛盾:专业适配缺失与服务效能失衡洗发水等日用品为高频消费品类,用户诉求聚焦产品适配、使用答疑、售后解决,且消费触点分散,服务体系陷入双重困境。专业端,人工客服专业储备不足,新员工培训1个…

2026/7/8 10:24:09 阅读更多 →
达普韦伯Dappweb助力传统企业入Web3:区块链公链、交易所、DApp全栈开发详解

达普韦伯Dappweb助力传统企业入Web3:区块链公链、交易所、DApp全栈开发详解

2026年,Web3已从“概念炒作”彻底转向“生产力交付”阶段。 传统企业不再问“Web3是什么”,而是直接问:我们怎么低成本、安全、合规地切入? 答案越来越清晰:找对伙伴,从底层基础设施到上层应用,…

2026/7/8 11:07:49 阅读更多 →

最新新闻

SU-23T PWM 占空比不稳定性问题排查指南

SU-23T PWM 占空比不稳定性问题排查指南

版本信息:v1.0 | 更新日期:2026-02-11 适用模组:SU-23T、SU-21T、SU-22T 等蜂鸟L系列超低功耗模组 素材来源:技术交流群真实案例(智能公元12群,2026-02-09) SmartPi 官方文档 前言 在使用 SU-2…

2026/7/9 10:52:26 阅读更多 →
只会生成意见,不算真正会审合同

只会生成意见,不算真正会审合同

此前我们聊过一个问题:为什么在大模型已经足够强的今天,企业做合同审查,仍然需要 MeCheck 这样一款专门的合同 AI 产品。那篇文章里,我们讲的是 MeCheck 为什么要建在大模型之上,而不是停留在“把合同丢给模型问一问”…

2026/7/9 10:48:04 阅读更多 →
5分钟快速上手:image2cpp图像转换工具完整使用指南

5分钟快速上手:image2cpp图像转换工具完整使用指南

5分钟快速上手:image2cpp图像转换工具完整使用指南 【免费下载链接】image2cpp 项目地址: https://gitcode.com/gh_mirrors/im/image2cpp 想要在Arduino或树莓派项目中显示自定义图像吗?image2cpp图像转换工具是你的完美选择!这款强大…

2026/7/9 10:46:04 阅读更多 →
Polar Code 编解码 MATLAB 实现

Polar Code 编解码 MATLAB 实现

特点 Polar 编码(含冻结比特构造)SC(Successive Cancellation)解码 —— 理论基线CA-SCL(CRC-Aided SCL)解码 —— 5G NR 控制信道实际用的就是它AWGN BPSK 测试脚本 BER 曲线 代码风格延续你前面几轮的&…

2026/7/9 10:44:03 阅读更多 →
系规备考课程的底层架构——拆解金钟老师的教学逻辑

系规备考课程的底层架构——拆解金钟老师的教学逻辑

一门课程的价值,不仅在于它覆盖了多少知识点,更在于它的教学方法是否符合学员的学习规律。本文从教学逻辑的角度,分析金钟老师系规课程的架构设计。一、课程的整体架构课程按三阶段组织,分别是基础扫盲、案例攻坚、论文冲刺。这个…

2026/7/9 10:44:03 阅读更多 →
如何在Blender中高效使用MMD Tools插件:完整工作流指南

如何在Blender中高效使用MMD Tools插件:完整工作流指南

如何在Blender中高效使用MMD Tools插件:完整工作流指南 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …

2026/7/9 10:42:01 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻