我目前正在尝试使用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并增加其值,我感到困惑。
我没有将新Player分配给变量来创建对象,所以我不确定这是指向什么?
我没有写:
let a = new Player(0, 0);
然后this.x将引用对象'a'的x属性。所以当我没有将它分配给变量时,this.x指的是什么?它如何不断递增?
我想也许我创建了一个闭包,但是我正在函数内部创建一个播放器的新实例,我假设一旦调用并执行,get就会被丢弃,因此它如何保持对对象x和y属性的引用而不分配给一些变量。
答案 0 :(得分:3)
我没有将新Player分配给变量来创建对象,所以我不确定这是指向什么?
调用new Player
创建一个对象。
对该对象有两个引用。
this
在函数内部您丢弃后者。
您将前者复制到名为self
的变量中。
这已被事件处理程序函数关闭。参见How do JavaScript closures work?。
然后this.x将引用对象'a'的x属性。所以当我没有将它分配给变量时,this.x指的是什么?它如何不断递增?
仅通过使用this
关键字即可将其分配给变量new
。
我想我可能创建了一个关闭
是
但是我正在函数内部创建一个播放器的新实例,我假设一旦调用并执行get便会将其丢弃
闭包的全部目的是使变量在关闭它的函数中保持活动状态。
答案 1 :(得分:0)
在JavaScript中,不是基本类型(布尔,空,数字,字符串,未定义)的所有内容都是对象。因此,您创建的函数是一个对象。
使用new
实例化Object的实例。每个实例都有一个自动的this
变量。