访问“属性”时未定义Javascript对象值?

时间:2011-10-19 14:40:51

标签: javascript

为什么这是undefined

var testObj = {
   CONSTANT: "blah",
   someVal: this.CONSTANT
}
console.debug(testObj.someVal); // prints "undefined"

如果它与我实际创建新原型的事实有关,因此this关键字不起作用,那么我也想了解以下内容:

我正在使用Dean Edward的base.js,我正在尝试做与上面类似的事情:我有一个扩展Base的对象:

Test = Base.extend({
  testObj: {
   someVal: this.CONSTANT
  }
  CONSTANT: "blah";
});
var test1 = new Test();
console.debug(test1.testObj); // someVal is undefined

在上面,如果我做someVal: "blah"这个按预期工作;我只是不确定为什么我无法访问this.CONSTANT。如果因为this被应用于testObj而不是Test的范围,那么如何解决此问题(我尝试设置that: this变量,没有运气)?

更新:根据答案我看到我做错了。我现在的问题是:使用base.js模型,是否有一种方法可以从同一个类(函数外)中访问“类级”常量?

2 个答案:

答案 0 :(得分:5)

this引用window而不是对象。

var CONSTANT =  "blah";
var testObj = {
   someVal: this.CONSTANT
}
testObj.someVal; // blah

您无法使用对象表示法访问对象本身。

<小时/> 您可以更改此范围:

function testObjCreator() {
  this.CONSTANT = "blah";
  return ({
      val: this.CONSTANT
  })
}
var a = new testObjCreator()
a.val; // blah

答案 1 :(得分:0)

“this”(本地)仅在已被称为方法的函数中定义。

base.js仅在函数定义中使用“this”,它指定函数作为方法调用的对象。您的示例不包含任何函数定义。