Javascript - 为什么调用方法无法正常工作?

标签 javascript call

请引用- https://jsfiddle.net/ta2u2z9a/

var o = {
    x: 6
};

function a() {
    this.x = 3;
    this.y = function() {
        alert(this.x)
    }
}

var a1 = new a();
a1.y.call(); //shouldn't it alert 3?

a1.y.call(o) //is alerting 6, correct!

为什么第一个警报,警报未定义?它不应该提醒 3 吗?

最佳答案

.call() 的第一个参数需要是方法的“所有者对象”:

a1.y.call(a1);

这是怎么回事?

当您“自然地”调用方法时(例如 a1.y()),this 的值会自动设置为对象(例如 a1 )。

当函数 not 用作方法时(例如 var x = a1.y; x();),this 的值> 是全局/窗口对象,或者是 null(取决于您是否处于“严格模式”)。

.call() 方法(它是函数的方法)是一种显式设置this 值的方法,而不是让它自动分配。使用 .call() 时,您必须自己提供 this 值作为第一个参数。

关于Javascript - 为什么调用方法无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31295056/

相关文章:

javascript - 下拉框选择静音/禁用文本区域?

php - 使用 PHP 调用 SOAP API

python - 如何在不退出程序的情况下在linux上打印最近的最后一次调用

c# - C#调用mysql存储过程的方法

javascript - 解析 REST api 注销 401 未经授权

javascript - 删除对 Gatsby 的引用

javascript - 当 React 尝试使用 load 注册在 window.onload 或 window.addEventListener 中运行的组件时,DOM 尚未加载

javascript - Phonegap 构建 - 未捕获的类型错误 : Cannot read property 'getPicture' of undefined

android - 通话时设备是否进入休眠状态?