为什么我不能使用“this”将对象中的对象变量分配给JavaScript中该对象中的另一个变量

时间:2011-02-20 04:09:34

标签: javascript

为什么这项工作:

variable = "hi";
variabletwo = this. variable;
alert( variabletwo );

而这不:

Object = {
   variable: "hi",
   variabletwo: this.variable
}
alert( Object.variabletwo );
在JavaScript中

3 个答案:

答案 0 :(得分:3)

因为在初始化表达式之后才能访问新对象。

你拥有的this就是字面之外的。{/ p>

对此的简单测试将是:

var self = this;
var anObject = { isThis: self === this }
alert(anObject.isThis)

答案 1 :(得分:3)

在函数体this中是对调用函数的对象的引用。它是一个非常动态的值 - 在调用函数时设置。

在函数this之外没有多大意义 - 它将指向全局背景。

在原始代码中,this.variable将解析为window.variable。 e.g:

window.variable = 'global';
Object = {
   variable: "hi",
   variabletwo: this.variable
};
alert( Object.variabletwo );
// displays 'global'

但是,在作为对象属性(方法)的函数中,this将指向您期望的对象。 e.g:

myObject = {
    variable: "hi",
    setTwo: function () {
        this.variabletwo = this.variable;
    }
};
myObject.setTwo();// when called `this` will point to myObject
alert(myObject.variabletwo);
// displays 'hi'

还值得注意的是,在您的原始文档中,您销毁了对本机Object构造函数的引用。执行代码后,您会发现new Object()会抛出错误。即:

alert(Object === {}.constructor);
// displays false

答案 2 :(得分:1)

在第一个示例中,两个vars都在全局范围内,对'this'的引用也是如此。在该范围内,'this'是全局的,其中每个var都是一个属性。因此,在全球范围内,'variable'和'this.variable'是相同的。

然而,在第二个中,“this”并未引用“变量”所在的相同范围。 'variable'位于'Object'下,因此您必须将其引用为'Object.variable'。