这个问题在这里已有答案:
我目前正在尝试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属性的引用而不分配给某个变量。
我没有将新播放器分配给变量来创建一个对象,所以我不确定这是什么意思?
调用new Player
会创建一个对象。
该对象有两个引用。
this
功能内部你抛弃了后者。
您将前者复制到名为self
的变量。
这由事件处理函数关闭。见How do JavaScript closures work?。
然后,this.x将引用对象'a',x属性。那么this.x指的是什么时候我没有将它分配给一个变量,它是如何继续递增的?
您已将其分配给变量 - this
- 只需使用new
关键字即可。
我想也许我创造了一个封闭
是
但是我在一个函数中创建一个新的实例,我假设一旦被调用并执行就会被丢弃
闭包的整个要点是它将变量保持在关闭它的函数内。
在JavaScript中,所有非基本类型(布尔值,空值,数字,字符串,未定义)都是一个对象。所以你创建的函数是一个对象。
使用new
实例化Object的实例。每个实例都有一个自动this
变量。