【发布时间】:2019-07-15 04:07:51
【问题描述】:
我目前正在尝试使用 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 并增加其值感到困惑。
我没有将新玩家分配给变量来创建对象,所以我不确定 THIS 指向什么?
我没写:
let a = new Player(0, 0);
然后 this.x 将引用对象 'a', x 属性。那么当我没有将它分配给变量时 this.x 指的是哪里以及它如何保持递增?
我想也许我创建了一个闭包,但我在一个函数中创建了一个新的播放器实例,我假设 get 一旦调用和执行就被丢弃,那么它如何保持对对象 x 和 y 属性的引用而不分配给一些变量。
【问题讨论】:
-
“我假设它一旦被调用就会被丢弃” - 你的假设是不正确的。虽然您没有在构造函数之外存储对 Player 实例的显式引用,但事件侦听器保留了对
self的引用,创建了一个闭包,导致实例保留在内存中。
标签: javascript constructor new-operator