使用'this'在对象中创建值

时间:2014-12-13 07:15:20

标签: javascript this

var obj = {
   name : 'object',
   itis : this.name,
}

为什么它未定义?当我查看对象的值时,itis值为空。感谢信。

5 个答案:

答案 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 );