在计算对象上调用方法时,javascript中的"this"是什么?

rec*_*ive 10 javascript this

我知道this可能是javascript中第二个被问到最多的东西,就在浮点运算之后.

我大致知道如何this工作的,以及它如何影响箭头功能.call(),.apply().bind().我以为我理解了它的一切.但我不.

在Web浏览器中,按预期document.createElement("div").classList.add("c")产生undefined.然而,这个表达令人惊讶地是一个错误.

(true && document.createElement("div").classList.add)("c")
Run Code Online (Sandbox Code Playgroud)

我预计它会是一样的,但它确实如此

Uncaught TypeError: Illegal invocation
    at <anonymous>:1:54
Run Code Online (Sandbox Code Playgroud)

pra*_*999 5

你的陈述

(true && document.createElement("div").classList.add)("c") 也可以改写如下:

var add = (true && document.createElement("div").classList.add)
add("c")
Run Code Online (Sandbox Code Playgroud)

[逻辑AND(&&)expr1 && expr2:如果可以转换为false,则返回 expr1; 否则,返回 expr2.]

您看到该函数add现在window是实际classList对象的一部分并失去对实际对象的引用,因此无法正确调用.

add this现在指向全局对象.

如果您执行以下操作(如果新div是您页面上唯一的div),则它再次引用原始对象:

(true && document.createElement("div").classList.add).bind(document.getElementsByTagName("div")[0].classList)("c")
Run Code Online (Sandbox Code Playgroud)