[英]Function not showing correct result
我已經寫了這段代碼
var foo = {
x:2,
baz: {
x:1,
bar:function() {
return this.x;
}
}
}
var go = foo.baz.bar;
console.log(go());
答案是不確定的。 但為什么? 當go
映射到功能bar
,它應該返回2
因為foo
有x:2
。
正如Tushar在評論中所說,要回答這個問題:
該上下文取決於函數的調用方式
這是一個片段,說明使用bind
, call
或apply
實現您想要的內容的一些方法
var foo ={ x:2, baz: { x:1, bar:function() { return this.x; } } }; var go = foo.baz.bar; console.log("go(): " + go()); //this === window, window.x is undefined console.log("go.bind(foo)(): " +go.bind(foo)()); //this === foo, foo.x is 2 console.log("go.bind(foo.baz)(): " +go.bind(foo.baz)()); //this === foo.baz, foo.baz.x is 1 console.log("go.apply(foo): " + go.apply(foo)); //2 console.log("go.apply(foo.baz): " + go.apply(foo.baz)); //1 console.log("go.call(foo): " + go.call(foo)); //2 console.log("go.call(foo.baz): " + go.call(foo.baz)); //1 var x = 100; console.log(go()); //100, since window.x == 100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.