javascript - Javascript 中 'this' 的值

标签 javascript jquery this

谁能解释一下为什么下面的“this”指向 DOM 对象而不是 Window?

$("a").click(function() {
    console.log(this);
});

这会产生:

<a id="first" href="http://jquery.com">

考虑以下应该是相同的场景:

function Foo() {
    this.click = function(f) {
        f();
    }
}

var obj = new Foo();
obj.click(function() {
    console.log(this);
});

我们在这里得到的是窗口对象(我所期望的)。

最佳答案

在 Javascript 中,OOP 与您在 Java 等语言中所习惯的不同。

基本上,更容易认为没有 OOP 而 this只是函数的一个“隐藏参数”。

例如,当你看到

function f(x, y, z) {
    console.log(this, x, y, z);
}

认为在常见的 OOP 语言(例如 Java)中会是

function f(this, x, y, z) {
    console.log(this, x, y, z);
}

当你看到 var a = b.f(x, y, z); ,想var a = f(b, x, y, z) .

当你看到 var a = f(x, y, z);想想var a = f(undefined, x, y, z); (在浏览器环境下,strict mode未激活时为f(window, x, y, z);)

现在应该更容易理解为什么this了。在您的示例中,嵌套范围中的含义不同。

关于javascript - Javascript 中 'this' 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11289668/

相关文章:

javascript - 将字符串化/encodeURIComponent 数据导出到文件时扩展崩溃

javascript - 如何使用 promise 返回在 nodejs 的快速路由器中递归编辑的对象数组?

Web 应用程序 : centralization vs. 规范的 Javascript/jQuery 最佳实践

javascript - HTML5/Jquery - 预加载音频的正确方法是什么?

javascript - 无法读取未定义的属性 'disguiseToken'

javascript - 使用 ui-router 时,自定义指令在嵌套 View 中不活动

jquery - 我试图在特定元素上显示鼠标元素

javascript - 'this'关键字,不清楚

javascript - 使用 jQuery 在 JavaScript 对象中使用 'this'

javascript - 有什么方法可以将函数内的所有变量定义为 this 的属性?