5. this的指向
5.1 this繫結有四條規則。
function
foo(
)var a =
2foo()
//2
function
foo(
)var obj =
obj.
foo(
)//2
function
foo(
)var obj =
foo.
call
(obj)
//2
// 硬繫結
function
foo(
something
)var obj =
var bar =
foo.
bind
(obj)
var b =
bar(3)
// 2 3
console.
log(b)
//5
function
foo(a)
var bar =
newfoo(2
)console.
log(bar.a)
//2
5.2 判斷this的方法規則優先順序從高到低• 1. 函式是否在
new
中呼叫(new繫結)? 是,this
繫結的是新建立的物件bar
var bar =
newfoo
()
var bar =
foo.
call
(obj2)
• 3. 函式是否在某個上下文物件中呼叫(隱式呼叫)? 是,this
繫結的是obj1
var bar = obj1.
foo(
)
• 4. 都不是的情況下,使用預設繫結。 嚴格模式下,this
繫結到undefined
,否則繫結到全域性物件
var bar =
foo(
)
綜上:
5.3 繫結例外
function
foo(
a,b)
//把陣列「展開」成引數
foo.
(null,[
2,3]
)//a:2, b:3
//使用bind進行柯里化
var bar =
foo.
bind
(null,2
)bar(3
)//a:2, b:3
//使用更安全的this,
//使用object.create(null)替代null
var ∅ = object.
create
(null
)foo
.bind
(∅,2
)
function
foo(
)var a =
2var o =
var p =
o.foo()
//3(p.
foo(
)= o.
foo())
()//2
賦值表示式5.4 箭頭函式p.foo() = o.foo()
的返回值是對目標函式的引用,呼叫位置是foo()
,會應用預設繫結。
如何判斷THIS指向?
什麼是this?this是用來做什麼的?這是首先我們必須知道的 this它是js的乙個關鍵字,用來指向某乙個物件 如何判斷this指向?函式 方法 內 一種以函式的方式呼叫 不帶.this指向window 一種以方法的形式呼叫 函式名前面帶.this指向點前面的 函式 方法 外,this指向wind...
如何判斷this指向?
什麼是this?this是用來做什麼的?這是首先我們必須知道的 this它是js的乙個關鍵字,用來指向某乙個物件 如何判斷this指向?函式 方法 內 一種以函式的方式呼叫 不帶.this指向window 一種以方法的形式呼叫 函式名前面帶.this指向點前面的 函式 方法 外,this指向wind...
this 的指向以及如何改變指向
this 永遠指向最後呼叫它的那個物件 箭頭函式語法比函式表示式更短,並且不繫結自己的this需要通過查詢作用域鏈來確定 this 的值,如果箭頭函式被非箭頭函式包含,this 繫結的就是最近一層非箭頭函式的 this。在函式內部使用 this this 先將呼叫這個函式的物件儲存在變數 this ...