我一直在纠结这个问题,想知道是否有人能指出我正确的方向。
我有以下对象定义:
var foo=function(){};
foo.prototype={
foo1:function(){},
baz:{
baz1:function(){}
},
bar:function(){
function privateFunc1(){}
function privateFunc2(){}
return {
bar1:function(){
//do something using privateFunc1
//return the result
}
};
}
};
var foobar = new foo();
现在,要访问 baz
方法的 baz1
子方法,我可以执行 foobar.baz.baz1()
但是要访问 bar
方法的 bar1
子方法,我必须执行 foobar.bar().bar1()
(注意 bar
之后的额外括号)
有没有一种方法可以定义 foo
对象,以便我可以使用 foobar.bar.bar1()
调用 bar1
(注意,没有额外的括号),但是仍然在 bar 中使用私有(private)函数
方法。privateFunc1
和 privateFunc2
此外,请注意,我不能使 bar
成为自执行函数,因为它依赖于 foo
对象的可变属性,在函数拥有 self 后可能会发生变化-执行。
希望问题足够清楚...提前致谢。
最佳答案
这可能会朝着您想要的方向发展。 http://jsfiddle.net/Una9k/1/
var Foo = function() {
this.mutableProperty = "mutable";
this.bar = new Foo.prototype.Bar(this);
};
Foo.prototype = {
constructor: Foo,
Bar:function(context){
var ctx = context;
function privateFunc(){
alert(ctx.mutableProperty);
}
return {
bar1: function () {
privateFunc();
}
};
}
};
var foobar = new Foo();
foobar.bar.bar1(); // alerts 'mutable'
foobar.mutableProperty = "changed";
foobar.bar.bar1(); // alerts 'changed'
关于javascript 子对象和定义模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6319680/