Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';setter方法对JavaScript对象中的其他变量没有任何影响吗?_Javascript_Oop_Object_Constructor - Fatal编程技术网

为什么';setter方法对JavaScript对象中的其他变量没有任何影响吗?

为什么';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

有人能解释一下为什么在“setFirstName”setter方法将“firstName”变量更改为“NewFirstName”后,我的对象中的“fullName”变量没有更改吗。我知道这个问题的正确答案,但我不明白为什么下面的解决方案也不起作用

代码如下:


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将被用来解决这个问题,方法和我建议的一样。