javascript - 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 属性的引用而不分配给某个变量。
解决方案
我没有将新 Player 分配给变量来创建对象,所以我不确定 THIS 指向什么?
调用new Player
创建一个对象。
该对象有两个引用。
this
函数内部- 函数的返回值
你丢弃后者。
您将前者复制到一个名为self
.
这由事件处理函数关闭。请参阅JavaScript 闭包如何工作?.
然后 this.x 将引用对象 'a', x 属性。那么当我没有将它分配给变量时 this.x 指的是哪里以及它如何保持递增?
您已经将它分配给了一个变量 — this
— 只需使用new
关键字。
我想也许我创建了一个闭包
是的
但是我在一个函数中创建了一个新的播放器实例,我假设一旦调用并执行它就会被丢弃
闭包的全部意义在于它使变量在关闭它的函数内保持活动状态。
推荐阅读
- java - Vaadin 14 显示简单的 HTML 页面
- c++ - 防止在旧 Windows 系统上启动程序
- android-ndk - 调用 onImageAvailable 回调,但 acquireLatestImage 返回 NO_BUFFER_AVAILABLE
- angular - 如何在 Angular 中使用 API 的动态数据生成树结构?
- virtual-machine - 是否有任何其他可能性可以从我的 devbox 访问 git
- mongodb - 从 mongodb 集合中过滤掉相关产品
- elasticsearch - elasticsearch.service:失败,结果为“退出代码”
- c# - 如何在 Kubernetes 中的 pod 上持久化 prometheus 计数?
- r - 在 facet_wrap 上重命名图例标题
- javascript - ElectronJS:未捕获的 TypeError:ipcRenderer.on 不是函数