var obj = {
name : 'object',
itis : this.name,
}
为什么它未定义?当我查看对象的值时,itis值为空。感谢信。
答案 0 :(得分:2)
this
由其出现的范围定义。因此,您不能以对象文字中所需的方式使用this
,因为对象文字没有自己的范围。
this
具有当前范围(即全局范围或函数或方法的范围)给出的含义。你可以这样做:
var obj = {
name : 'object',
itis : 'object'
}
或者这个:
function Obj() {
this.name = 'object';
this.itis = this.name;
}
var obj = new Obj();
但你正在尝试的东西不起作用。以下是实际问题的一个示例:
function Foo() {
this.name = "My function";
var obj = {
name : 'My literal object',
itis : this.name
}
alert(obj.itis); // "My function"
}
Foo();
警报显示My function
,因为this
的定义范围为Foo
; obj
没有自己的范围。
答案 1 :(得分:2)
代码
var obj = { name: 'object';
itis: this.name };
完全等同于
var obj = {};
obj.name = 'object';
obj.itis = this.name;
换句话说,this
引用外部作用域的当前this
,与新创建的对象无关。
与
有所不同var obj = {};
obj.name = 'object';
obj.itisf = function(){ return this.name; }
console.log(obj.itisf()); // Shows "object"
之所以发生这种情况是因为this
,执行函数时会成为对象。
一个简单的合理化是,当你使用.
从对象获取函数后立即调用函数时,该函数中的this
将成为对象。该规则还暗示在Javascript中:
obj.f();
和
var ff = obj.f;
ff();
到不执行相同的操作,因为在第一种情况下,仅在f
中执行代码期间,this
的值将成为对象。在第二种情况下,this
将成为全局对象。
答案 2 :(得分:0)
this
关键字不会引用该对象,即使您在其中使用了该对象。它仅指引发当前范围的事物。
答案 3 :(得分:0)
this
时, obj
引用对象this
:
var obj = {
name : 'object',
itis : function(){
return this.name;
}
}
obj.itis();//'object'
答案 4 :(得分:0)
'this'关键字指的是当前范围,在您的情况下;你在对象文字声明中使用'this',我想,'this'指的是'Window'对象。
如果我们看到语法明智,就不会有错误。但在运行时它将是“Undefined”。请看下面的例子
var xyz = {
a: 10,
b: 20,
c: this.a + this.b
};
document.write(xyz.a," and ",xyz.b);
document.write(xyz.c);
// to cross check
document.write(Window.a + Window.b);
// Why NaN ?
document.write( undefined + undefined );