判定 this 到底指向哪個物件

2021-08-17 10:29:38 字數 444 閱讀 2613

現在,我們可以按照優先順序來總結一下從函式呼叫的呼叫點來判定 this 的規則了。按照這個順序來問問題,然後在第乙個規則適用的地方停下。

函式是通過 new 被呼叫的嗎(new 繫結)?如果是,this 就是新構建的物件。

var bar = new foo()

函式是通過環境物件(也稱為擁有者或容器物件)被呼叫的嗎(隱含繫結)?如果是,this 就是那個環境物件。

var bar = obj1.foo()

否則,使用預設的 this(預設繫結)。如果在 strict mode 下,就是 undefined,否則是 global 物件。

var bar = foo()

以上,就是理解對於普通的函式呼叫來說的 this 繫結規則 所需的全部。是的……幾乎是全部

摘自:you-dont-know-js

用作備忘

物件的指向

new例項化的時候 建構函式的原型是公用的 當new乙個函式的時候 這個函式就成為了建構函式 建構函式的屬性和方法都會在例項物件上重新建立一邊造成記憶體浪費 function huge var s new huge console.log s s.name 2 console.log s var n...

Array物件的判定

關於js物件型別的判斷,最複雜的在於regexp和array了,判定regexp的情形不較少,而array就比較多了,下面就是判斷array的方法 方法一 利用instanceof來判斷物件是不是array的例項 function isarray arr 方法二 利用constructor來判斷 f...

this關鍵字到底指向誰?

先做乙個小測試,如果全部答對了,恭喜你不用往下看了。第一題 zhangsan wangwu zhangsan 第二題 zhangsan zhangsan 第三題 我叫zhangsan 我叫zhangsan 第四題 zhangsan zhangsan zhangsan lisi wangwu 往下看,...