this 永遠指向函式執行時所在的物件,而不是函式被建立時所在的物件。
匿名函式或不處於任何物件中的函式指向 window 。例:
1var foo = }
foo.bar() 輸出 true
2var foo = )(); } }
foo.bar() 輸出 domwindow
3var foo = } }
foobar = foo.bar;
foobar.baz(foo.bar) 輸出 true
但是⋯⋯
wtf = foo.bar.baz;
wtf(foo.bar) 輸出 false
為什麼?因為 wtf 不是在乙個物件中被呼叫的,this 指向 domwindow 。驗證:
console.log(this) 輸出 domwindow
wtf(this) 輸出 true
沒明白你說的控制 this 指向是什麼意思,this 所指的東西是語言機制的一部分,你控制不了。如果你是問怎麼在函式裡保留乙份其執行時所在物件的 reference,可以用閉包(closure):
var foo = ;}};
baz = foo.bar();
此時 baz 是乙個脫離 foo.bar 而存在的函式,但是:
baz() 會輸出 duh i am foo 和 domwindow 。
js中with的用法
with語句用於設定 在特定物件中的作用域。它的語法 with expression statement 例如 var smessage hello with smessage alert touppercase 輸出 hello 在這個例子中,with語句用於字串,所以在呼叫touppercase...
js中this的用法
this是js的乙個關鍵字,隨著函式使用場合不同,this的值會發生變化。但是總有乙個原則,那就是this指的是呼叫函式的那個物件。1 純粹函式呼叫。function test test 其實這裡的this就是全域性變數。看下面的例子就能很好的理解其實this就是全域性物件global。其實這裡的t...
JS中 的用法
var o var test o.flag 等效於var test o.flag false alert test 由於對null與undefined用 操作符時都會產生true的結果,所以用兩個感嘆號的作用就在於,如果明確設定了o中flag的值 非 null undefined 0 等值 自然te...