0

有人可以帮助我理解为什么在将对象文字的两个属性添加在一起作为第三个属性的定义时会得到 NaN 吗?

这是一个代码示例,我也创建了一个 Codepen。

http://codepen.io/Tristan-zimmerman/pen/cvJFE

objLiteral = {
 numberOne : 50,
 numberTwo : 80,
 mathStuff : this.numberOne + this.numberTwo,
};

console.log(objLiteral.mathStuff);
//Logs NaN.

当我使用构造函数实例化一个新对象时,我得到了正确的数学:

function objConstructor () {
  this.numberOne = 50;
  this.numberTwo = 80;
  this.mathStuff = this.numberOne + this.numberTwo;
}

var objConstructed = new objConstructor();

console.log(objConstructed.mathStuff);
//Logs 130.

正如您在 Codepen 示例中看到的那样,我有一个对象文字,然后将属性附加到结果框架中的正文中。我还从 Object 文字中记录了“this”,以确保范围是正确的,并且实际上是在引用该对象。

4

2 回答 2

1

当您创建对象字面量时,this指的是全局范围(其中numberOnenumberTwo保持未定义)。function关键字创建您想要的本地范围。

于 2013-07-12T16:48:33.307 回答
1

您无法访问其定义中的对象文字,您应该为此创建一个函数,检查此笔

在其中,我将 objectLiteral 定义为:

objLiteral = {
 numberOne : 50,
 numberTwo : 80,
 mathStuff : function() {
    return this.numberOne + this.numberTwo;
 }
};

objLiteral.matchStuff(); //130

这种方式this将是对象,否则将是window因为当时该对象不存在(并且 window 它是默认范围)

另外,我建议您在此主题上进行更多搜索,这本书是一个很好的(免费)资源

于 2013-07-12T16:51:07.620 回答