JavaScript对象方法

在 JavaScript 中,对象可以包含方法,即函数作为它的属性。这些被称为对象函数或方法。
例如:

const ITshareArray = {firstname: "张三",secondname: "二愣子",birthYear: "1996",job: "程序员",friends: ["李四", "王五", "牛二"],calaAge: function (birthYear) {return 2037 - birthYear;},
};console.log(ITshareArray.calaAge(1998));  //使用点号运算符去调用对象中的函数
console.log(ITshareArray["calaAge"](1998));  //使用括号运算符去调用对象中的函数

在这里插入图片描述

● 但是上述代码中,有一个设计问题,我们在打印时候,可以随意输入对象的出生年,会导致于对象中的年份不匹配,按照正确的设计理念来说,我们去计算对象中的年龄是,对象的年份应该是从对象获取,以来达到对象年龄的正确性,而想在对象方法中对象的key,我们可以使用this关键字
这里简单的介绍一个this这个关键字,后面我们会对this这个关键字做详细解释;

this

例:

const ITshareArray = {firstname: "张三",secondname: "二愣子",birthYear: "1996",job: "程序员",friends: ["李四", "王五", "牛二"],calaAge: function (birthYear) {return 2037 - this.birthYear;},
};console.log(ITshareArray.calaAge());
// console.log(ITshareArray["calaAge"](1998));

当在 JavaScript 中使用 this 关键字时,它引用的是当前代码执行的上下文对象。这个上下文对象可以是一个函数内部的对象或一个对象本身。
注:如果没有正确地设置 this,可能会导致代码出错或返回预期外的结果。在函数作为方法调用时,this 的值是调用该方法的对象。在函数作为普通函数调用时,this 的值通常是全局对象(浏览器中的 window)。但是,在严格模式下,函数作为普通函数调用时,this 的值为 undefined。

● 但是,这里有一个问题,为什么我们不可以写成如下?

 calaAge: function (birthYear) {return 2037 - ITshareArray.birthYear;},

这样也会完美的运行,但是在编程,我们始终会有一个原则,就是不要去使用重复的自己。什么意思么?就是如果对象的名称有改变,那么上述的代码就会出问题,但是如果你使用this关键字的话,就不会出问题,因为this是始终指向对象方法中的整个对象,对象名称进行改变,并不会影响this的指向出现问题;

● 除此之外,我们还可以通过this关键字,将我们计算出来的年龄存储到对象中,以方便我们后面如果需要大量重复的去计算年龄的时候,我们只需要去对象中检索关键字即可,如下所示

const ITshareArray = {firstname: "张三",secondname: "二愣子",birthYear: "1996",job: "程序员",friends: ["李四", "王五", "牛二"],calaAge: function () {this.age = 2037 - this.birthYear;return this.age;},
};
console.log(ITshareArray.calaAge());
console.log(ITshareArray.age);

在这里插入图片描述

注:这里一定要先console.log(ITshareArray.calaAge());才能正确的打印出age,如果直接console.log(ITshareArray.age);的话,会返回undefined,原因是age 属性只有在调用 calaAge 方法后才会被赋值。因此,在调用 calaAge 方法之前,this.age 是不存在的,并且尝试访问它将会返回 undefined。

挑战

输出“ITshareArray是一个46岁的程序员,并且她拥有了驾照”

const ITshareArray = {firstname: "张三",secondname: "二愣子",birthYear: "1996",job: "程序员",friends: ["李四", "王五", "牛二"],hasDrivesLicense: true,caclAge: function () {this.age = 2020 - this.birthYear;return this.age;},getSummary: function () {return `${this.firstname}是一个${this.caclAge()}岁的${this.job},他${this.hasDrivesLicense ? "有" : "没有"}驾照`;},
};console.log(ITshareArray.caclAge());
console.log(ITshareArray.getSummary());

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/103077.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux设置登录超时自动退出

问题背景 最近登录某台linux服务器,经常遇到超时自动退出现象,如下图: 是因为服务器设置了超时时间,如果某个超时时间段内服务器没有任何操作,则会自动注销 解决方法 查看服务器设置的超时时间(TMOUT 变量的值)&am…

宏定义天坑记录

宏定义天坑记录 事件原委与推理过程 在编译一个使用了Protobuf的项目时出现了如下报错 [ybVM-8-7-centos boost_searcher]$ make g -o http_server http_server.cc data/raw_html.pb.cc -stdc11 -lboost_system -lboost_filesystem -lpthread -ljsoncpp -lprotobuf In file…

数据库分析工具explain

1.id:查询语句的编号 2.select_type:查询类型,有三种,simple简单查询,primary,subquery等 3.table:查询的表 4.type:查询性能,system > const > eq_ref > ref > range > index > ALL system&…

软件设计模式系列之一——设计模式概述

1 设计模式的由来和概念 设计模式最早出现在建筑行业,是一位建筑领域的大牛,针对不同建筑物的建造方法进行了总结,针对类型相似的建筑场景,将较好的解决方案进行比较,提取了其中共性的套路规范,形成一定的设…

JAR will be empty - no content was marked for inclusion!

现象 在对自建pom依赖组件打包时&#xff0c;出现JAR will be empty - no content was marked for inclusion!错误。 方案 在pom中怎么加packaging标签内容为pom&#xff0c;标识只打包pom文件 <?xml version"1.0" encoding"UTF-8"?> ...<grou…

【网络】路由配置实践1

网络实践-路由篇 本文使用vmware虚拟机进行路由表配置实践&#xff0c;通过配置路由表连接两个不同的网络&#xff0c;不涉及路由协议&#xff0c;全手动配置&#xff0c;旨在理解路由表的概念 网络规划&#xff1a; 准备三台centos7虚拟机&#xff0c;其中一台作为路由设备ro…

一辆新能源汽车的诞生之旅:比亚迪常州工厂探营

作为在新能源汽车领域首屈一指的国产品牌&#xff0c;比亚迪近年来可以说是捷报频传&#xff0c;高奏凯歌。 以比亚迪常州工厂为例&#xff0c;据介绍该工厂当初规划设计时定下的生产目标&#xff0c;是年产量能够达到20万辆。然而在2023年上半年&#xff0c;该工厂光是主要销往…

优先发展非化石能源

生态兴则文明兴。面对气候变化、环境风险挑战、能源资源约束等日益严峻的全球问题&#xff0c;中国树立人类命运共同体理念&#xff0c;促进经济社会发展全面绿色转型&#xff0c;努力推动本国能源清洁低碳发展。 智慧光伏遮阳伞&#xff0c;搭配座椅设置智能补给休息区&#x…

如何解决国标GB28181视频平台EasyGBS国标云服务平台设备在线,通道却显示离线的情况

EasyGBS是基于国标GB28181协议的视频平台&#xff0c;可支持视频直播、录像、云存储、检索与回放、云台控制、告警上报、语音对讲等功能。EasyGBS平台功能全面、综合性强、视频能力灵活&#xff0c;能够涵盖所有视频监控领域的需求&#xff0c;已经在大量的项目中落地应用&…

重磅功能 一键助你打造TikTok爆款视频

内容为王的时代&#xff0c;内容需求大爆炸。短视频电商即是当下的时代红利&#xff0c;也是营销领域最前沿的谜题。 TikTok短视频日新月异&#xff0c;但是内容选题、标签、热度视频该如何找&#xff1f;这些问题至关重要... 为了解决上述这些电商客户的痛点&#xff0c;超店…

酷开系统游戏空间,开启大屏娱乐新玩法

在这个充满科技感和无限创意的时代&#xff0c;游戏已经成为我们生活的一部分。而随时着科技的不断发展&#xff0c;以及游戏爱好者的游戏需求在不断提高&#xff0c;促使游戏体验也向更加丰富多彩的方向发展。显然&#xff0c;酷开科技早已经认识到游戏发展的新蓝图&#xff0…

一个帮各位填秋招表格省一点事的浏览器插件

最近应该很多和我一样的双非鼠鼠在秋招等面试&#xff0c;而且处于海投阶段&#xff0c;为了不忘记投了哪些公司&#xff0c;可以用这样一个表格来记录&#xff1a; 其中有些字段&#xff0c;比如状态、投递时间、查看进度的网址其实可以不手动输入&#xff0c;所以搞个插件来…