Javascript'THIS'值使用构造函数而不赋值给变量[duplicate]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我目前正在尝试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值,并将事件监听器绑定到window对象。

我很困惑新玩家实际存储的位置以及它如何引用this.x和this.y并增加其值。

我没有将新播放器分配给变量来创建一个对象,所以我不确定这是什么意思?

我没写:

let a = new Player(0, 0);

然后,this.x将引用对象'a',x属性。那么this.x指的是什么时候我没有将它分配给一个变量,它是如何继续递增的?

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

javascript constructor new-operator
2个回答
3
投票

我没有将新播放器分配给变量来创建一个对象,所以我不确定这是什么意思?

调用new Player会创建一个对象。

该对象有两个引用。

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

你抛弃了后者。

您将前者复制到名为self的变量。

这由事件处理函数关闭。见How do JavaScript closures work?

然后,this.x将引用对象'a',x属性。那么this.x指的是什么时候我没有将它分配给一个变量,它是如何继续递增的?

您已将其分配给变量 - this - 只需使用new关键字即可。

我想也许我创造了一个封闭

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

闭包的整个要点是它将变量保持在关闭它的函数内。


0
投票

在JavaScript中,所有非基本类型(布尔值,空值,数字,字符串,未定义)都是一个对象。所以你创建的函数是一个对象。

使用new实例化Object的实例。每个实例都有一个自动this变量。

© www.soinside.com 2019 - 2024. All rights reserved.