首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的getter/setter方法不能像预期的那样工作--怀疑这与'this‘有关

在开发过程中,getter和setter方法用于访问和修改对象的属性。当getter/setter方法不能像预期的那样工作时,可能与'this'关键字的使用有关。

'this'关键字在JavaScript中表示当前对象的引用。它可以用于访问当前对象的属性和方法。在getter和setter方法中,使用'this'关键字来引用当前对象是非常重要的。

如果getter/setter方法不能像预期的那样工作,可能是因为'this'关键字没有正确地指向当前对象。这可能是由于以下几个原因导致的:

  1. 上下文丢失:在某些情况下,当将getter/setter方法作为回调函数传递给其他函数时,上下文可能会丢失。这时候,'this'关键字将指向其他对象或全局对象,而不是当前对象。可以使用bind()、call()或apply()方法来显式地绑定'this'关键字,确保它指向当前对象。
  2. 对象属性重写:如果在对象中重新定义了getter/setter方法对应的属性,那么在调用getter/setter方法时,实际上是在访问属性而不是方法。这可能导致预期之外的行为。确保没有重写属性,或者在getter/setter方法中使用不同的属性名称。
  3. 对象创建方式:如果对象是通过构造函数创建的,确保在创建实例时使用了'new'关键字。否则,'this'关键字将指向全局对象而不是新创建的对象。
  4. 作用域问题:在某些情况下,可能会发生作用域嵌套的问题,导致'this'关键字的指向不正确。可以使用箭头函数来解决作用域问题,因为箭头函数会继承父级作用域的'this'值。

总结起来,当getter/setter方法不能像预期的那样工作时,首先要检查'this'关键字的指向是否正确。确保'this'指向当前对象,并避免上述可能导致问题的情况。如果问题仍然存在,可以进一步检查代码逻辑和调试错误。

腾讯云相关产品和产品介绍链接地址:

  • 云函数(Serverless):https://cloud.tencent.com/product/scf
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iotexplorer
  • 移动推送服务(信鸽):https://cloud.tencent.com/product/tpns
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏引擎(GSE):https://cloud.tencent.com/product/gse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TW洞见〡gettersetter那些事

这些以get和set开头方法,被称为gettersetter。时间久了,这种做法似乎成了一种神圣约定,每个人都记得应该这么写,而忘记了为什么这么写。...但是,当你写了很多程序,写过很多gettersetter,尤其是有些类方法,只有gettersetter时,总会有一天,你会疑惑,到底为什么要这么干? Why private field?...要解释为什么需要gettersetter,先要知道为什么字段应该是private。 在汇编语言时,数据都是公开。所谓公开,是指几乎任何指令,都可以作用在任意数据块上。...如果采用文章开始时代码,即添加gettersetter,有新需求出现时,只需修改getName方法,不需要修改调用处代码,即可实现。...正是考虑到未来可能出现功能扩展,所以Java和C++这样语言,即使还不确定是否应该将字段保护起来,也要写gettersetter,而这也导致了很多多余代码。

89060

【你不知道事】JavaScript 中用一种更先进方式进行深拷贝:structuredClone

因此,如果我们需求适合这个方法,可以用这个方法。但是,我们可以用 structuredClone 做这个方法有很多不能事情。 为什么不是 _.cloneDeep?...事实上,这确实也预期那样工作: import cloneDeep from 'lodash/cloneDeep' const calendarEvent = { title: "Builder.io...根据我 IDE 中导入成本扩展,打印任何导入函数成本,这个函数占了 17.4kb` 大小(5.3kb gzip): 假设你只导入了这个函数。...如果改用更常见方式导入,没有意识到摇树并不总是按希望方式工作,那么可能会无意中为这个函数导入高达2 5kb 文件 什么是 structuredClone 克隆不了 函数不能被克隆 structuredClone...DataCloneError 异常 属性描述符 settergetter 不能克隆 类似元数据特性也不会被克隆。

32810
  • 警惕不规范变量命名

    Boolean,而isSend使用是原生类型boolean,而gettersetter方法是使用Intellij IDEA自动生成,布尔类型生成gettersetter方法时略微特殊,比如原生类型...生成gettersetter方法之后,其实已经有点奇怪了,不急,继续下面的实验。...,事先重写了Bar类toString方法,调用 test(1)看看是否能成功映射。...正确答案是:A,D 怎么样,符合你预想吗?JavaBean规范并不是很多人想那样,首字母小写,之后每一个单词首字母大写这样驼峰命名法。...另外需要知晓一点,IDE提供自动生成gettersetter机制,以及lombok这类框架机制,都有默认规则,在与其他反射框架配合使用时,只有双方都遵循规范,才能够配合使用,而不能笃信框架。

    1.9K90

    java最困扰你那些事?又将如何解决?

    就算你用了一些加载工具比如Launch4j,你仍然需要让用户安装一个超过200 MB 框架来运行程序。 没有gettersetter Java还缺少gettersetter注解。...心愿单 最想要就是 Perl 中那种上下文相关函数了,以及当处理真正异常时,这些函数可以在一个语言中所扮演角色。...同样,大整数运算因为同样原因变很难使用。 呃, 好吧 没有无符号基础类型。这尼玛是闹哪样啊! 还是gettersetter 1、null(最大槽点)。...2、没有gettersetter注解(例如,没有属性)。 3、Java 只支持位置参数。喜欢Smalltalk 那种支持多样化参数形式,或者是强制使用关键字参数Python 3。...目前情况是,程序员很少会把一个方法参数设置为最终类型,因为那样会让变量很快变得不可读。同时,在一个方法中重写参数也是很少见情况。 集合接口。

    77850

    自定义工作流设计

    引言 工作偶尔会遇到需要审批相关系统,对于流程步骤相对固定,一般会采取某些第三方工作流来做对应系统。目前唯一用过就是activiti工作流。对它进行了简单研究学习。...基于此,尝试写一个简单关于自定义流程设计,多一个备选方案。 实现 1.设计基于需求,经典图 ? image.png 从这张图抽出了四个对象:事件、节点、网关、流程线。...为什么这么抽取对象??? 看前言寻找答案,找不到那就是因为经验!!! 为什么一根线走组长审批了还走经理,另外一根线直接走经理??? 需求如此。。。。...; import javax.persistence.Entity; import javax.persistence.Id; @Entity @Getter @Setter public class...历史任务表 两个组长审批通过后顺利跳转经理审批,满足预期设计。 5.5经理审批通过 ? 进行中任务表 ? 历史任务表 经理审批通过后,进行中任务清空,流程结束。满足设计预期要求。

    1K10

    从源代码理解atomic为什么不是线程安全

    原文作者:彭二青年 纠正一个网上常见错误例子: 开文首先要纠正一个网上常见关于atomic非线程安全举例:如果线程 A 调了 getter,与此同时线程 B 、线程 C 都调了 setter...可以简单理解为我们拿到值是错。这个例子中,如果线程A getter值是个错误值才能说是线程不安全,可是这个例子就算线程A可能取到好几种值,你能说取值不对吗;不能。...atomic原子性和nonatomic非原子性 atomic :系统自动生成getter/setter方法会进行加锁操作;可以理解过读写锁,可以保证读写安全;较耗时; nonatomic : 系统自动生成...getter/setter方法不会进行加锁操作;但速度会更快;\ 下面是两个nonatomic和atomic修饰变量,我们用代码掩饰其内部实现; @property (nonatomic) UIImage...其实现在一想很奇怪,为什么要把atomic和线程安全联系在一起去探究;atomic只是对属性getter/setter方法进行了加锁操作,这种安全仅仅是get/set读写安全,仅此之一,但是线程安全还有除了读写其他操作

    2K20

    @Accessors 注解极简教程

    @Accessors 源码 我们打开 @Accessors 源码可以看到: 1)该注解主要作用是:当属性字段在生成 gettersetter 方法时,做一些相关设置。...@Accessors 属性说明 2.1 fluent 属性 不写默认为false,当该值为 true 时,对应字段 getter 方法前面就没有 get,setter 方法就不会有 set。...2.3 prefix 属性 该属性是一个字符串数组,当该数组有值时,表示忽略字段中对应前缀,生成对应 gettersetter 方法。...那么,我们在生成 gettersetter 方法如下,它也是带有 xx 和 yy 前缀。...如果,我们把它前缀加到 @Accessors 属性值中,则可以没有前缀那样,去调用字段 gettersetter 方法

    52430

    Java 最困扰你那些事

    就算你用了一些加载工具比如Launch4j,你仍然需要让用户安装一个超过200 MB 框架来运行程序。 没有gettersetter Java还缺少gettersetter注解。...心愿单 最想要就是 Perl 中那种上下文相关函数了,以及当处理真正异常时,这些函数可以在一个语言中所扮演角色。...同样,大整数运算因为同样原因变很难使用。 呃, 好吧 没有无符号基础类型。这尼玛是闹哪样啊! 还是gettersetter 1、null(最大槽点)。...2、没有gettersetter注解(例如,没有属性)。 3、Java 只支持位置参数。喜欢Smalltalk 那种支持多样化参数形式,或者是强制使用关键字参数Python 3。...目前情况是,程序员很少会把一个方法参数设置为最终类型,因为那样会让变量很快变得不可读。同时,在一个方法中重写参数也是很少见情况。 集合接口。

    85080

    kotlin中数据类重写setter getter正确方法

    前言 kotlin数据类,由于其内部封装了gettersetter方法,极大地简化了我们编程代码,但同时其不能java那样方便重写getter或者setter方法,也给大家造成了一定麻烦。...这种格式,或者yyyy年MM月dd日这种,再或者更加友好一点,根据时间段,转成1小时前、2天前、一周前这种,在实际开发中都是常有的情况,在Java中我们可以很方便getter方法中做这些处理,但是kotlin...getter方法都是内部封装,并不直接支持重写,看到网上有些答案是这样处理: data class OrderBean(val _createTime: Long){ val createTime...()等一些方法还是会沿用长整型值,而且当你做某些值对比时候,会产生一些不可预测结果。...val createTimeShow:String get() = { ...do something } } 总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值

    4.1K10

    iOS_Extension、Category、load、initialize

    (所以尽量不起同名方法,除非是故意想覆盖) ​ Category中声明属性,只会生成settergetter声明,不会实现settergetter和成员变量 如: // MOPerson+Fitness.h...在编译时,其数据就包含在类信息中;Category在运行时,才会将数据合并到类信息中 Extension不能Category那样拥有独立**@implementation部分。...也就是说Extension声明方法必须依托对应类@implementation**部分实现。 2、为什么Category可以添加属性和方法,却不能添加成员变量?...具体过程可以看这篇文章:iOS底层原理总结 - Category本质 5、Category为什么只能加方法,而不能加属性? ​...可以添加属性,只是系统不会自动为Category中属性实现settergetter方法;因为不能添加实例变量,所以需要通过runtime动态绑定方式,实现settergetter方法

    52100

    奇怪知识增加了,如何让 (a == 1 && a == 2 && a == 3) 返回 true

    这道题目乍看之下似乎不太可能,因为在正常情况下,一个变量值如果没有手动修改,在一个表达式中是不会变化。当时也冥思苦想很久,甚至一度怀疑这道题目的答案就是 不能。...从 JS 获取变量过程入手,理所当然立马能想到就是数据[7] gettersetter 方法,通过这样 hack ,肯定也能达到题目的严格相等要求。...所以回归到题目中,当我们访问一个被设置了存取描述符元素时,如果在 get 方法里面做一些操作,就能巧妙使得最终结果达到预期: var i = 1 Object.defineProperty(window...; } 同时,这种劫持 gettersetter 方法本质上是执行了一个函数[9],内部除了用自增变量,还可以有更多方法: const value = function* () { let...; } [10]总结 对于严格相等情况,一般来说只能通过劫持数据 getter 来进行操作,但是里面具体操作方法在上面列举就有很多。

    1K30

    浅谈python,c,java,优劣,语言高低与效率相反不变规律

    下面,让我们讲一讲为什么会出现以上一些常见问题: 1、Java中静态方法不能翻译成Python方法。...如果你应用程序或者平台,要被Python编程语言开发者使用,那么他们只会感谢你,没有在他们工作中,添加使用XML负担。 4、尽量不要使用Gettersetter。...因此尽量不要去写gettersetter,而是把它们内置在“属性”里。除非你需要比一个简单访问更复杂功能(一般情况下并不多见),除此之外,都请尽量不要去写gettersetter。...在Java中,你必须使用gettersetter,因为公共字段不允许你以后改变想法时,再去使用gettersetter。...所以如果你在使用Python编程语言时,并不能感到比使用Java节省了时间,那么你就需要好好想一想,使用Python目的是什么?到底是否根据现有的工作特性和环境需求,选择了正确语言?

    3.2K90

    Objective-C属性(property)特性(attribute)

    ->name); 为什么gettersetter 那么,为什么还要如此麻烦地声明和实现settergetter呢?...它帮我们自动生成gettersetter(声明方法,并实现方法。当然,这部分代码并不会出现在你项目中,是隐藏起来)。...这样对比,atomic就显得比较鸡肋了,因为它并不能完全保证程序层面的线程安全,又有额外性能耗费(要对gettersetter进行加锁操作,验证过,在某个小项目中将所有的nonatomic删除,内存占用平均升高...getter= 和 setter= 按字面意思,很容易理解,就是重命名gettersetter方法。...存取方法不能以new开头,如果你要以new开头命名一个属性:@property (copy, nonatomic) NSString *newName;于是会默认生成一个new开头getter方法

    1.9K30

    IDEA 2022 之 Lombok 使用 教程

    比如对于简单 Java 对象(POJO),很多代码里充斥着大量 getter() 和 setter() 方法,样板代码占用比例高,影响可读性,引入 Lombok 只需一个注解就能达到相同效果,而且更简洁...插件,方便本地 IDE 研发工作。...使用时候就可以正常拿到 getCountry() 和 setCountry() 这样方法。...5.代码案例: 常用注解:@Getter/@Setter: 作用类上,生成所有成员变量getter/setter方法;作用于成员变量上,生成该成员变量getter/setter方法。...对第一步骤得到 AST 进行处理,找到 @Getter @Setter 注解所在类对应语法树(AST) Lombok 修改该语法树(AST),增加 getter() 和 setter() 方法定义相应树节点

    33510

    那些Vue开发遇到坑---响应式系统

    转换为getter/setter。...你可以理解为响应式系统对每一个实例数据绑定了getter/setter函数,要获取数据需要通过调用getter函数,为数据写入新值则需要调用setter函数。...Watcher就在小本本上记下来了,并且和messagegetter/setter函数保持联系,当我们点击按钮,按钮click事件改变了message值,这时会先调用setter函数,setter...好了,吐槽完之后我们还是老老实实看看,到底那里出了问题,为什么代码没有按照预期运行。...然后作为一个程序员,你可能就要开始打debugger一步一步调试,然后你会发现,你代码并没有写错,在调试器中,message属性确实改变了,并且按照预期被设置为‘clicked’,但是,为什么页面毫无反应

    1.1K50

    Python最令人困惑操作符

    有些用户可能更喜欢后一种方法,但在个人看来,总是发现加号等于运算符可以使这样表达式更加简洁。 可变元组 03 您很可能熟悉Python中元组和列表数据结构。...这是Python中两种不同类型可迭代一维数组,它们之间只有一个键差。元组是不可变结构,这意味着一旦定义,元组就不能被更改。列表当然是可变,它包含了append()这样方法。...letters[0] += "Q" 正如预期那样,我们得到了另一个类型错误,因为元组一旦创建就不能更改。但是,只有在对数据结构调用操作符后才会抛出此类型错误。...乍一看,这里似乎犯了某种错误,但考虑到Python方法学,这一切在某种程度上确实是有意义。这一切都与Python如何处理数据有关,更重要是,plus-equals如何处理不同数据类型。...这就是为什么正等号这么棒部分原因! 仔细看看 04 现在我们已经知道了加号等于运算符有多奇怪,为了更好地理解其用法中怪异之处,让我们来看看该运算符实际上是如何工作

    65310

    编程语言大对决!Ruby和Python谁更可读?

    然而,Ruby程序员不太可能Python程序员浏览Ruby代码库那样轻松地浏览Python代码库。 接下来本文将告诉你原因。 先让我们先用Python来创建一个类「博客文章」。...让我们来试着打印这篇博客标题。 oops!出现了未定义方法(undefined method)。 在Ruby中,无法像在Python中那样访问实例变量。你需要一个getter。...你也不能直接设置属性——你需要一个setter: 现在我们再试着运行看看。 到现在Python和Ruby可读性似乎都不错,等等,让我们看看下面的测试。...而在Ruby中,我们可以访问post.count,但我们不能像在 Python 中那样访问 BlogPost.count。 由于这是一个类变量,我们需要能够从类本身访问它。...认为在 Ruby 中更容易看出类和实例属性之间区别。 Settergetter 允许您清楚地指定哪些属性是可读和可写。 您可以通过不实现 setter 来保护您类属性。

    68820

    荐读|属性与可直接访问数据成员之间应该如何选

    ,这使得开发者能够通过属性实现很多功能,例如,可以给gettersetter 设定不同访问权限。...采用隐式写法时,开发者不用自己在属性gettersetter中编写过多逻辑。...getter(获取器)与setter(设置器)这两个单独方法,这使得我们能够对二者施加不同修饰符,以便分别控制外界对该属性获取权限以及设置权限。...由于C#不允许给索引器起名字,因此同一个类型索引器必须在参数列表上有所区别,否则就会产生歧义。 另外,索引器必须明确实现出来,而不能简单属性那样由系统默认生成。...虽然在使用上属性可以数据成员那样来访问,但是从MSIL角度来看,却不是这样,因为访问属性时所使用指令与访问数据成员所使用指令是有区别的。

    1K30
    领券