ES6 JavaScript对象的计算属性可以';不能通过对象方法访问 问题

ES6 JavaScript对象的计算属性可以';不能通过对象方法访问 问题,javascript,json,oop,ecmascript-6,locale,Javascript,Json,Oop,Ecmascript 6,Locale,这可能很简单,我不确定这是否是一个“面向对象”的问题(仅仅因为它处理对象)。我构建了一个JavaScript对象作为学习练习。我可以访问各种方法和属性,但是,依赖于计算属性的***方法返回未定义并给出错误。我不是JavaScript专家,大约6年前我开始学习jQuery。现在,我试着自学香草JavaScript基础知识。因为ES6/2015似乎是我试图学习的最新方法 我确实在PHP中有一些OOP经验,所以我认识了一些OOP概念,但我只是说我有点生疏 当我试图查看objActorInfo.birt

这可能很简单,我不确定这是否是一个“面向对象”的问题(仅仅因为它处理对象)。我构建了一个JavaScript对象作为学习练习。我可以访问各种方法和属性,但是,依赖于计算属性的***方法返回未定义并给出错误。我不是JavaScript专家,大约6年前我开始学习jQuery。现在,我试着自学香草JavaScript基础知识。因为ES6/2015似乎是我试图学习的最新方法

我确实在PHP中有一些OOP经验,所以我认识了一些OOP概念,但我只是说我有点生疏

当我试图查看
objActorInfo.birth.birthdateusa的内容时,出现了问题

未捕获引用错误:未定义birthdatenumsusa 在Object.get birthdateusa[作为birthdateusa](:23:27) 时间:1:20

当我在console.log中记录整个objActorInfo对象并检查birthdateusa属性时,我会得到以下附加信息:

[异常:ReferenceError:未在Object.get中定义birthdatenumsusa birthdateusa[作为birthdateusa](:23:27)位于Object.remoteFunction (:2:14)]

我不确定我做错了什么

我的代码
console.clear();
var objActorInfo={};
//函数生日字符串(日期){
objActorInfo.BORTH={
/*日期*/
生日4:1960,
出生月份:10,
莫的生日:18岁,
获取birthDateUSA(){
/*此方法设置多个属性的值
因此,根据我的理解,不需要
归还任何东西。
*/
var birthdate4USA=[this.birthMonthNum,this.birthDayOfMO,this.birthdayer4].join('/');
this.birthMonthStr=birthdate4USA.toLocaleString(“en”,{month:“long”});
},
};
console.log(objActorInfo);

console.log(“objActorInfo.birth.birthdateusa:+objActorInfo.birth.birthdateusa);
您拼错了
birthdatenumsua

    var birthdatenumsusa = [this.birthmonthnum,this.birthdayofmo,this.birthyear].join('/');
    this.birthdatenumsusa = birthdatenumsusa;

编写JavaScript时,camelCase是一种惯例,它会使类似这样的小错误变得更加明显。

您的代码引用了
birthdatenumsusa
而没有
这个。
;它不是一个局部变量,而是对象的一个属性。我建议使用不太容易混淆的变量名。另外,您正在尝试使用e> .toLocaleString()在普通数组上;我不知道您希望它做什么,但该数组不是日期实例。此外,您的
birthdateusa
getter不需要返回任何内容。使用getter作为方法来变异对象是非常非常规的。还有什么更“正常”的呢就是让getter检查内部计算值是否已经存在,如果不存在,则对其进行初始化;在任何一种情况下,它都会返回值。@非常感谢。那么,通过检查和初始化,您的意思是什么?:
get birthdateusa(){return this.birthdate_nums_usa=this.birthdate_nums_usa?this.birthdate_nums_usa:[this.birthmonthnum,this.birthdayofmo,this.birthdayer.birthyear].join('/');}
您仍然没有从日期部分创建实际的日期实例。您需要这样做才能使
.tolocalstring()
起作用。只需将日期部分与“/”粘合在一起即可不会给你一个日期。谢谢你的回答!好的,我在本地进行了更新…我是否应该更改问题中的代码以反映它?@EricHepperle-CodeSlayer2010你的代码是否还遇到其他问题?如果是,那么是的,将其添加到你的问题并更新上下文。如果所有问题都得到解决…那么我认为简单的复选标记会解决够了。不,还没有解决。我已经做了一些调整来简化代码,并根据@Pointy和你自己给出的建议修改了代码。再次感谢你迄今为止的帮助。@EricHepperle-CodeSlayer2010啊,我的错误。你似乎很了解OO原则,所以我认为
日期的文档e> 对象应该回答您的所有问题。然后,
parseFloat
将字符串转换为浮点,或者
parseInt
for string->intThank。我明天必须查看它并向您报告。