首页 > 解决方案 > Javascript'THIS'值使用构造函数而不分配给变量

问题描述

我目前正在尝试使用 Javascript 中的构造函数并编写了一些代码,但我自己不太理解

function someOtherFunction() {
    new Player(0, 0);
}

function Player(x, y){

    let self = this;

    this.x = x;
    this.y = y;

    window.addEventListener('click', function() {
        self.x++;
        self.y++;

        console.log('x:' + self.x + 'y: ' + self.y);
    });
}

someOtherFunction();

我创建了一个构造函数,它在使用 New 关键字时执行,然后设置 x 和 y 值并将事件侦听器绑定到窗口对象。

我对 new Player 的实际存储位置以及它如何引用 this.x 和 this.y 并增加其价值感到困惑。

我没有将新 Player 分配给变量来创建对象,所以我不确定 THIS 指向什么?

我没有写:

let a = new Player(0, 0);

然后 this.x 将引用对象 'a', x 属性。那么当我没有将它分配给变量时 this.x 指的是哪里以及它如何保持递增?

我想也许我创建了一个闭包,但是我在一个函数中创建了一个新的播放器实例,我假设 get 一旦被调用和执行就被丢弃,那么它如何保持对对象 x 和 y 属性的引用而不分配给某个变量。

标签: javascriptconstructornew-operator

解决方案


我没有将新 Player 分配给变量来创建对象,所以我不确定 THIS 指向什么?

调用new Player创建一个对象。

该对象有两个引用。

  • this函数内部
  • 函数的返回值

你丢弃后者。

您将前者复制到一个名为self.

这由事件处理函数关闭。请参阅JavaScript 闭包如何工作?.

然后 this.x 将引用对象 'a', x 属性。那么当我没有将它分配给变量时 this.x 指的是哪里以及它如何保持递增?

您已经将它分配给了一个变量 — this— 只需使用new关键字。

我想也许我创建了一个闭包

是的

但是我在一个函数中创建了一个新的播放器实例,我假设一旦调用并执行它就会被丢弃

闭包的全部意义在于它使变量在关闭它的函数内保持活动状态。


推荐阅读