我编写了自己的第一个对象,包括方法,但我并不真正理解其中的作用域。我正在编写一个小应用程序,我将不得不一直使用这些鼠标参数。我只想能够通过简单的方式访问这些值
let mouse_positionX = mouse.pos.x;
我的第一次尝试:
function Mouse() {
this.now = { x: 0, y: 0};
this.start = { x: 0, y: 0};
this.stop = { x: 0, y: 0}
this.delta = { x: 0, y: 0};
let getDelta = function(e) {
return { x: (e.clientX - this.start.x), y:(e.clientY - this.start.y) };
}
let move = function(e) {
this.now = { x: e.clientX, y: e.clientY };
this.delta = getDelta(e);
}
let start = function(e) {
document.addEventListener('mousemove', move, false);
this.start = { x: e.clientX, y: e.clientY };
}
let stop = function(e) {
this.stop = { x: e.clientX, y: e.clientY };
this.delta = getDelta(e);
document.removeEventListener('mousemove', move, false);
}
document.addEventListener('mousedown', start, false);
document.addEventListener('mouseup', stop, false);
}
const mouse = new Mouse();
但这不起作用。this其中一个“私有”函数的内部指向window对象本身而不是对象本身:
let start = function(e) {
document.addEventListener('mousemove', move, false);
this.start = { x: e.clientX, y: e.clientY };
console.log(this); // window object
}
所以我使用了另一个变量:_self = this在函数之外。_self在函数内部可用:
function Mouse() {
this.now = { x: 0, y: 0};
this.start = { x: 0, y: 0};
this.stop = { x: 0, y: 0}
this.delta = { x: 0, y: 0};
let _self = this;
let getDelta = function(e) {
return { x: (e.clientX - _self.start.x), y:(e.clientY - _self.start.y) };
}
let move = function(e) {
_self.now = { x: e.clientX, y: e.clientY };
_self.delta = getDelta(e);
}
let start = function(e) {
document.addEventListener('mousemove', move, false);
_self.start = { x: e.clientX, y: e.clientY };
}
我对这种对象用法不熟悉,所以我有两个问题。我找不到具体的答案,或者我不知道要搜索什么。
A:为什么this里面的一个函数是指向window对象而不是对象本身?
B:为这样的事情使用对象通常是个坏主意(并且还绑定到对象内部的文档)吗?
鸿蒙传说
相关分类