为什么这项工作:
variable = "hi";
variabletwo = this. variable;
alert( variabletwo );
而这不:
Object = {
variable: "hi",
variabletwo: this.variable
}
alert( Object.variabletwo );
在JavaScript中。
答案 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'。