为什么';setter方法对JavaScript对象中的其他变量没有任何影响吗?
有人能解释一下为什么在“setFirstName”setter方法将“firstName”变量更改为“NewFirstName”后,我的对象中的“fullName”变量没有更改吗。我知道这个问题的正确答案,但我不明白为什么下面的解决方案也不起作用 代码如下:为什么';setter方法对JavaScript对象中的其他变量没有任何影响吗?,javascript,oop,object,constructor,Javascript,Oop,Object,Constructor,有人能解释一下为什么在“setFirstName”setter方法将“firstName”变量更改为“NewFirstName”后,我的对象中的“fullName”变量没有更改吗。我知道这个问题的正确答案,但我不明白为什么下面的解决方案也不起作用 代码如下: var Person=功能(第一个和最后一个){ 让firstName=firstAndLast.split(“”[0]; 让lastName=firstAndLast.split(“”[1]; 让fullName=firstName
var Person=功能(第一个和最后一个){
让firstName=firstAndLast.split(“”[0];
让lastName=firstAndLast.split(“”[1];
让fullName=firstName+“”+lastName;
//吸气剂
this.getFirstName=函数(){
返回名字;
};
this.getLastName=函数(){
返回姓氏;
};
this.getFullName=函数(){
返回全名;
};
//二传手
this.setFirstName=函数(第一个){
firstName=first;
};
this.setLastName=函数(last){
lastName=last;
};
this.setFullName=函数(名称){
全名=姓名;
};
};
调试器;
var bob=新人(“bob Ross”);
log(bob.getFullName());
bob.setFirstName(“NewFirstName”);
log(bob.getFirstName());
log(bob.getFullName());
因为您只计算全名一次,所以它不会动态更新
您并不真正需要fullName
的变量,只需要一个getter:
this.getFullName = function() {
return firstName + " " + lastName;
}
除去
let fullName = firstName + " " + lastName;
或者,您可以保留变量,并在setFirstName
和setLastName
函数中手动更新它,但实际上这是getter要做的事情。因为您只计算fullName
一次,所以它不会动态更新
您并不真正需要fullName
的变量,只需要一个getter:
this.getFullName = function() {
return firstName + " " + lastName;
}
除去
let fullName = firstName + " " + lastName;
或者,您可以保留您的变量,并在setFirstName
和setLastName
函数中手动更新它,但实际上这是getter要做的事情。您的fullname
变量在实例化过程中只计算一次。您可能希望从getter返回firstname+''+lastname
,而不是fullname
本身。您的fullname
变量在实例化过程中计算一次。您希望从getter返回firstname+''+lastname
,而不是fullname
本身。感谢您的澄清。我想问一下,这种行为在其他面向对象编程语言(如Java)中是否很常见,或者这是JavaScript的一种怪癖?这很常见。在Java中,这与在构造函数中设置fullName
属性是一样的,它不会自动更新-您说的是“当您点击此代码时,按现在的方式处理这些字符串”。将使用一个getter以与我建议的相同的方式解决此问题。感谢您的澄清。我想问一下,这种行为在其他面向对象编程语言(如Java)中是否很常见,或者这是JavaScript的一种怪癖?这很常见。在Java中,这与在构造函数中设置fullName
属性是一样的,它不会自动更新-您说的是“当您点击此代码时,按现在的方式处理这些字符串”。一个getter将被用来解决这个问题,方法和我建议的一样。