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') });
这是一个好习惯还是不行?使用物体和物品更好吗?为什么呢?
答案 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( ));