如何使用';这';在下面的上下文中使用javascript
嗨,我正在尝试调用一个函数,它是JSON中的一个属性值 在不同的场景中获得不同的结果如何使用';这';在下面的上下文中使用javascript,javascript,json,function,this,var,Javascript,Json,Function,This,Var,嗨,我正在尝试调用一个函数,它是JSON中的一个属性值 在不同的场景中获得不同的结果 var x = 3; var foo = { x: 2, inner: { x: 1, reValue: function() { return this.x } } } var go = foo.inner.reValue; 案例1: console.log(go()) // 3 案例2: console.l
var x = 3;
var foo = {
x: 2,
inner: {
x: 1,
reValue: function() {
return this.x
}
}
}
var go = foo.inner.reValue;
案例1:
console.log(go()) // 3
案例2:
console.log(foo.inner.reValue()) // 1
有人能解释案例1吗?在全局范围内创建变量,自动将其分配给
窗口,因此:
var x = 3;
var go = foo.inner.reValue;
go()
是否与以下内容相同:
window.x = 3;
window.go = foo.inner.reValue;
window.go();
最后一行将调用go
,上下文(akathis
)为window
,因此this.x
将为window.x
如果在对象上调用函数,例如在obj.myMethod()
或等效的obj[“myMethod”]()
,则此绑定设置为对象(obj
,在示例中;§13.2.1)。~
您应该了解如何绑定上下文
如果将go
重新绑定到foo.internal
,则其行为与预期一致:
go=go.bind(foo.inner)
或者最初:
var go = foo.inner.reValue.bind(foo.inner);
只要未指定上下文,默认情况下会选择全局上下文(对于浏览器,这是窗口
)
因此,此
在您的示例中指的是窗口.x
,即3
此.x通过解释可能是函数的“局部”。
删除“this”以取消本地化,但如果这有问题,您可能需要以消除x歧义的方式写入。此值根据调用函数的位置确定。以下是一个例子:
让foo={
酒吧:这个,
baz:function(){
console.log(这个)
}
}
console.log(foo.bar);//日志窗口
foo.baz();//日志文件
让hey=foo.baz;
嘿();/日志窗口
请下次正确格式化您的问题…在第一种情况下,此
引用窗口对象,它有一个变量x=3
,而在第二种情况下,此
是foo
对象,其中x=2
这不是java@乔纳斯。我想,塞缪尔并不是故意写了什么东西java-ish
,但也没有说清楚。@thomas我不这么认为<代码>删除“this”
将不起作用。@JonasW。我不是这么说的;)谢谢你的简短解释。