我是OOP Javascript的新手,并且在this
关键字和事件中遇到问题。我想要实现的是:我有多个DOM对象,并且不仅希望将一个公共事件绑定到它们,还要保留一些有关全局容器中前述对象的数据(以提高运行时性能)。Javascript:将OOP方法附加到事件和'this'关键字
所以我做什么,基本上是这样的:
function ClassThatDoesSomething() {
/* keeps node ids for processing in this.init */
this.nodes = new Array();
/* keeps processed node data for fast access */
this.nodeData = new Array();
this.sthAddNodes = function(/* ids */) {
/* appends node ids to local variable (this.nodeData) */
}
function init() {
/* gathers data from all nodes that were
added before and stores it in this.nodeData */
/* here, unsurprisingly, 'this' references the window element*/
addEvent(window,'scroll',this.scroll);
}
function scroll() {
/* do stuff when user scrolls the page */
/* 'this' references the window element here too */
}
addEvent(window,'load',this.init);
}
后来,在文档正文,我可以补充一点:
var Ctds = new ClassThatDoesSomething();
并进一步上,通过添加DOM元素:
Ctds.addNodes(ids);
不需要进一步的实施代码。
问题:如何访问JS类实例在init
和scroll
方法和不的窗口元素。
它并不一定是通过this
关键字,我知道,但我还没有拿出任何东西。
P.S.
addEvent
是附加事件的一个非常基本的功能,它只是IE/Fx友好,并没有别的。- 我正在编写的代码已经正常工作,但在程序形式上,我只是想要OOP。
- 作为一个次要的问题,我以某种方式得到了印象,getter/setter方法在javascript中是不鼓励的,如果我使用它,它可以吗?
哇,这么多答案,我不知所措,谢谢大家。无论如何,一个方法到底会如何定义呢? (愚蠢的问题,对不起) – raveren 2009-10-16 14:09:39
@Raveren:这是一个很大的问题。此代码示例是crockford称为“特权”成员声明的示例。请参阅http://www.crockford.com/javascript/private.html这实际上是JavaScript中OOP的高级方法。如果您想从JavaScript中定义类的基本入手开始,请从以下网址开始:http://mckoss.com/jscript/object.htm – 2009-10-16 14:42:14