为什么这是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模型,是否有一种方法可以从同一个类(函数外)中访问“类级”常量?
答案 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”,它指定函数作为方法调用的对象。您的示例不包含任何函数定义。