我试图在Javascript中获取现有对象并将其重写为模块。下面是我尝试重写为模块的代码:
var Queue = {};
Queue.prototype = {
add: function(x) {
this.data.push(x);
},
remove: function() {
return this.data.shift();
}
};
Queue.create = function() {
var q = Object.create(Queue.prototype);
q.data = [];
return q;
};
这是我尝试制作模块:
var Queue = (function() {
var Queue = function() {};
// prototype
Queue.prototype = {
add: function(x) {
this.data.push(x);
},
remove: function() {
return this.data.shift();
}
};
Queue.create = function() {
var q = Object.create(Queue.prototype);
q.data = [];
return q;
};
return Queue;
})();
这是对的吗?如果是,我如何在我的js代码中的其他函数或区域中调用它。我感谢所有的帮助!
答案 0 :(得分:1)
拥有一个空的构造函数似乎有点无意义,然后在该构造函数上使用一个属性作为一个有效的构造函数。
为什么不利用构造函数......
var Queue = (function() {
var Queue = function() {
if (!(this instanceof Queue))
return new Queue();
this.data = [];
};
Queue.prototype = {
add: function(x) {
this.data.push(x);
},
remove: function() {
return this.data.shift();
}
};
return Queue;
})();
或者,如果您更喜欢使用Object.create
,我会这样做:
var Queue = (function() {
var Queue = function() {
var o = Object.create(proto);
o.data = [];
return o;
};
var proto = {
add: function(x) {
this.data.push(x);
},
remove: function() {
return this.data.shift();
}
};
return Queue;
})();
在这两种情况下,您只需使用Queue
来创建新对象。
var q = Queue();
从技术上讲,第一个应该使用new Queue()
,但它有instanceof
测试以允许new
被省略。
答案 1 :(得分:0)
如果您尝试模块化代码,请尝试ConversationJS。它允许您通过转义传统函数调用来保持代码库的极度分离: https://github.com/rhyneandrew/Conversation.JS