0
function name( elements ){

    init( elements );

    var ret = {
        add : function( more ){
            $.extend(elements, more);
            init( more );
        }
    }

    function init( el ){
        $.each(el,function(name, selector){
            //some stuff....
        });
    }

    return ret;
}

我非常使用这种结构(我自己创建的)......在不使用对象的情况下做这样的想法非常简单和好:

var reference = name({ one : $('#one'), two : $('#two') });

//and in a second moment...
reverence.add({ three : $('#tree') });

这是一个好习惯还是不是?使用物体和距离更好吗?为什么?

4

2 回答 2

1

在我看来,构造函数和原型(JavaScript 相当于传统的类)导致代码更具可读性和可维护性。我必须将您的示例阅读三遍才能弄清楚它在做什么(基本上,使用“添加”方法创建字典结构)。

原型更加 javascript-y,并使用一种常见且众所周知的范式——对其他人或两年后的你来说更容易回顾和理解。

考虑一下下面的内容是多么容易阅读:

/** @constructor */
function Name(elememts) {
    this.elements = this._init(elements)
}

Name.prototype.add = function(more) {
    $.extend(this.elements, this._init(more));
}

Name.prototype._init = function(elements) {
    // some stuff...
}

您的方法确实具有隐藏私有函数的优势。对于传统的原型继承,没有“private”关键字,因此您要记住不要从对象本身外部调用私有方法。(Google 的 Closure Compiler 确实有一个 @private 注释,它会帮助您执行它,但它并不是一个完美的系统。)

于 2013-03-10T20:56:26.150 回答
0

我建议你使用闭包......它们在 javascript 中很强大...... :)

var status = function (status) {
return {
get_status: function ( ) {
return status;
}
};
};

// Make an instance of status.
    var myStatus = status("amazed");
    document.writeln(myStatus.get_status( ));
于 2013-03-10T20:57:13.200 回答