什么是'这'意思是javascript函数内部

What does 'this' mean inside javascript function?

本文关键字:函数 内部 javascript 意思是 什么      更新时间:2023-09-26

我正在调用以下第三方JavaScript函数:

var Socket = function(url) {
    sockets.push(this);
    var me = this;
    me.readyState = 0;
    window.setTimeout(function() {
        me.readyState = 1;
        me.onopen();
    }, 500);
};

通过这个:

connection = new Socket(socketURL);

现在,我想一劳永逸地理解在函数中引用this意味着什么。它和Java中的一样吗。例如,我指的是我自己,还是在JavaScript的情况下指的是函数所在的命名空间?

this的引用取决于调用函数的方式。

例如:

function globalFn() { return this.val; }
var objectA = { val: 1, localFn: globalFn };
var objectB = { val: 2, localFn: globalFn };
objectA.localFn(); // `this` will be `objectA`, so it returns `1`.
objectB.localFn(); // `this` will be `objectB`, so it returns `2`.

到目前为止,一切都很好。它看起来和Java或其他面向对象语言中的一样。但是,这似乎很棘手:

var myFn = objectA.localFn;
myFn(); // `this` will be `undefined` in strict mode, causing an error

这表明this引用并没有绑定到函数本身,而是绑定到函数的调用方式。您可以使用函数对象的call方法"欺骗"它:

myFn.call(objectA); // `this` will be `objectA`, returns `1`.
globalFn.call(objectB); // `this` will be `objectB`, returns `2`.
objectA.localFn.call(objectB); // `this` will be `objectB`, returns `2`.

您甚至可以对没有定义为属性的函数的对象执行此操作:

var objectC = {val: 3};
myFn.call(objectC); // `this` will be `objectC` and will return `3`.

起初很难理解,有一个很棒的视频展示了它在YouTube上的工作原理:James Shore的《面向对象JavaScript的最终指南》。

已编辑。以前的答案不正确。这里有一个很好的解释:

code.tutsplus.com/tutorials/fully-understanding-the-codethis-code-keyword--net-21117