在Mootools中使用initialize()与setup()

时间:2010-06-07 06:56:19

标签: mootools

Mootools类有一个initialize()方法,在实例化新对象时调用该方法。

似乎setup()也是一种常用的方法。

我观察过的大多数课程都来自this.setup()而不是其他任何地方{@ 1}},这让我感到疑惑:

initialize()的目的是什么?为什么不将setup()代码放在setup()中?什么时候使用initialize()方法有意义?

4 个答案:

答案 0 :(得分:2)

正如奥斯卡所说,使用这个名字没有任何好处。如果你愿意,你只能使用一个带有一堆匿名函数的单个初始化函数和事件,但它不会使代码非常容易阅读,扩展和维护。

我倾向于使用this.setupScene()this.attachEvents()之类的方法来抽象不同的行为。在这些方法中,我倾向于遍历项目并调用较小的伪私有方法来执行所需的单一dom操作或element.addEvent,aka,this.elements.each(function(el) { this._attachEvent(el, "something"); }, this);

如果您与其他用户共享代码,那么大多数mootools作者在发布插件或贡献核心和更多分支时会尝试遵循这些约定。

例如,如果类与元素或元素数组相关,则始终设置this.element = document.id(el);等。

有关最佳做法的参考:http://ryanflorence.com/11-tips-for-creating-great-mootools-plugins/ 甚至是http://davidwalsh.name/mootools-class-tips

过了一会儿,他们开始变得非常有意义,并会在你的工作中帮助你。

答案 1 :(得分:1)

setup不是私有的MooTools方法。在创建以这种方式命名的实际方法之前,它不会做任何事情。

MooTools中有一个这种方法的实例 - 除了简单的关键字之外,它就像createDefaults()setInitialStuff()一样。

答案 2 :(得分:1)

使用只能从mootools类的初始化函数调用的setup / build / any函数没有任何好处。

我猜这种区别来自于你没有变量函数参数的语言,而是带有不同参数集的重载函数名。像Java一样。

在Java中,这非常有意义。如果你有多个构造函数在它们接受的参数上有所不同,那么你可以处理构造函数中的参数特定操作以及每个构造函数需要在所有构造函数调用的方法中调用的常见内容。

就个人而言,我不会在我的mootools类中进行区分,而只是在需要重用其他函数的代码时,只在自己的函数中外包功能。

不要对设置功能感到困惑,它们没有隐藏的力量。

答案 3 :(得分:0)

请记住,MooTools类是关于扩展和重用现有代码的。扩展类时,可能需要更改初始化,而不是更改设置代码。当然,您可以使用this.parent()运行父初始值设定项,但这可能会引入不必要的副作用。

采用这个(非常简单的)示例(view live):

var Counter = new Class({
    initialize: function(i){
        this.i = i;
        this.setup();
    },

    setup: function(){
        new Element('p', {
            'text': this.i
        }).inject(document.body);
    }
});

var MultiplyCounter = new Class({
    Extends: Counter,

    initialize: function(i){
        this.i = i * 2;
        this.setup();
    }
});

new Counter(5);
new MultiplyCounter(5);

扩展类只更改i的初始化,而不是类的整个实现。对于更复杂的类,这会创建更快(初始化只运行一次)和更清晰(divide and conquer)代码。