Javascript函数参考最佳实践

时间:2013-03-10 20:26:42

标签: javascript prototype javascript-objects

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') });

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

2 个答案:

答案 0 :(得分:1)

在我看来,构造函数和原型(JavaScript相当于传统类)导致更易读和可维护的代码。我必须阅读你的例子三次以弄清楚它在做什么(基本上,用'add'方法创建一个字典结构)。

原型更像是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注释,它可以帮助你强制执行它,但它并不是一个完美的系统。)

答案 1 :(得分: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( ));