gpt4 book ai didi

javascript - OO Javascript - 事件

转载 作者:行者123 更新时间:2023-12-02 02:23:20 26 4
gpt4 key购买 nike

我正在尝试使用 OO 方法学习 JavaScript。这是我的代码:

/*global document, MouseEvent */
MouseEvent.prototype.mouseCoordinates = function () {
return {
'x' : this.pageX - this.target.offsetLeft,
'y' : this.pageY - this.target.offsetTop
};
};

(function () {
var Pencil = function () {},
Canvas = function () {
this.element = document.getElementById('canvas');
this.tool = new Pencil();

this.element.addEventListener('click', this.tool.draw, false);
},
c;

Pencil.prototype.draw = function (event) {
var context = event.target.getContext('2d'),
coordinates = event.mouseCoordinates();

context.fillRect(coordinates.x, coordinates.y, 5, 5);
};

c = new Canvas();
}());

我正在尝试做一些类似 MS Paint 的事情。所以,我创建了一个 Canvas 对象和一个 Pencil 对象。我可以使用程序方法来做到这一点,但我不想这样做。我现在不想使用任何库,我只是在学习。

我有这些问题:

  • 注册事件有什么好的做法吗?我应该使用对象构造函数注册事件吗?

  • 我的 Canvas 对象有一个工具(在本例中为铅笔)对象。从概念上讲,这并不好。我的 Canvas 不应该有工具对象。它必须提供一个可以绘制的表面,仅此而已!但是,它作为回调(点击事件)存在。我该如何解决这个问题?

  • 每个工具都将具有相同的界面但具有不同的行为。我可以使用 Javascript 创建界面吗?

  • 我还能改进什么?

更新:

(function () {
var pencil = {
draw : function (event) {
var context = event.target.getContext('2d'),
coordinates = event.mouseCoordinates();

context.fillRect(coordinates.x, coordinates.y, 5, 5);
}
},
currentTool = pencil,
canvas = (function () {
var object = {};
object.element = document.getElementById('canvas');

object.element.addEventListener('click', function (event) {
currentTool.draw(event);
}, false);

return object;
}());
}());

我已遵循所有提示(谢谢,感谢您的帮助!)。你怎么认为?现在我有了一个“全局”currentTool 变量。你怎么看待这件事?谢谢。

谢谢。

最佳答案

我知道您说过您不想使用库,但我建议您查看一个优秀的开源库(例如 jquery)中的源代码。如果你想认真地学习更多,你应该看看真正优秀的开发人员编写的代码,看看他们是如何完成你刚刚提出的问题的。据我所知,除了不断阅读之外,这是通过良好实践学习编程语言的最佳方式之一。

关于javascript - OO Javascript - 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com