是否有简洁的方法来实现以下设计模式?
function a() {
function x() { /* code */ }
function y() { /* code */ }
/* more code */
x(); y(); // these can be called here
}
a();
a.x();
a.y();
我最近熟悉原型,可能会使用这样的东西:
a = function() { }
a.prototype.x = function() { }
a.prototype.y = function() { }
但也许有一种更苗条的方式?因为我的代码a
也属于其他原型,即
function plugin() { ... }
plugin.prototype.a = function () {}
plugin.prototype.a.prototype.x = function () {}
plugin.prototype.a.prototype.y = function () {}
答案 0 :(得分:1)
为什么不使用这样的简单定义功能* a : *
function a( x , y){
x();
y();
}
并按照以下方式调用:
x = function(){
// some code
}
y = function(){
// some code
}
a(x,y);
OR就此而言
a(
function(){
// some code
},
function(){
// some code
}
);
即使'a'属于别人的原型
你可以这样做: -
someOtherObj.prototype.a = function( x , y){
x();
y();
}
并且在定义或匿名之后调用时只传递x和y。
答案 1 :(得分:1)
你可以这样写:
function a() {
this.x = function () { /* code */ }
this.y = function () { /* code */ }
/* more code */
this.x(); this.y(); // these can be called here
}
var test = new a();
test.x();
test.y();
答案 2 :(得分:1)
您可以使用singleton or module pattern保持代码状态并避免冲突:
var foo = function(){
// private members
var bar;
baz: function(){return bar;}
// public members go here
return {
getBaz: baz
}
}();
只有您通过上述return
提供的成员才能在外部范围内使用,其余成员仅限于该对象。
有关更多设计模式的想法,请参阅:
答案 3 :(得分:1)
如果您正在寻找支持动态对象组合的JavaScript语言机制,就像您在问题中描述的那样,Object
有三个相关的功能可能会有所帮助(请注意,所有三个都需要 JavaScript 1.8.5):
如果您正在寻找更多实际设计模式,有许多涉及您问题的各个方面,但我相信最符合构建模块方法的设计模式似乎是这些文章(由不同的作者)描述了关于在JavaScript中实现设计模式的问题的主要主题:
希望这有用 -