我想重写一个文件以合并公共和私有变量。我正在尝试这样做:
var PrivateFunc = (function() {
//Private Functions
var _iAmPrivate = function(param, args){
//code
}
var _soAmI = function(param){
//code
}
return PrivateFunc;
})();
var PubObj = {
someVar: 1,
getPrivFunc: PrivateFunc,
publicFunc: function(param){
//This doesnt work
this.getPrivFunc._iAmPrivate(someVar, param);
//This doesn't either
getPrivFunc._soAmI(param);
}
};
我是“getPrivFunc
未定义”错误。我认为在getPrivFunc
之外移动PubObj
可以起作用,但我遇到了同样的问题。调用PrivateFunc
也会出错。我觉得这是一个愚蠢的错误,我只是没有看到它。
也许有更好的方法可以做到这一点?
答案 0 :(得分:1)
使用var
声明的任何内容在声明的函数之外将无法访问。您可以执行类似以下操作的操作。需要记住的重要一点是 你的var
出现在哪里定义了他们的声明范围。
var PubObj;
(function() {
PubObj = {
someVar: 1,
publicFunc: function(param) {
_iAmPrivate(this.someVar, param);
_soAmI(param);
}
};
//Inner Functions
var _iAmPrivate = function(param, args) {
//code
};
var _soAmI = function(param) {
//code
};
})();
答案 1 :(得分:1)
您的PrivateFunc没有返回任何内容,因为您在没有正确实现的情况下使用OOP概念。如果我们为每个私有函数创建一个为this
设置属性的函数,则可以使用new
关键字创建一个实例。
var PrivateFunc = new function() {
this._iAmPrivate = function(param, args) {
console.log('PrivateFunc._iAmPrivate called with', param, args);
}
this._soAmI = function(param) {
console.log('PrivateFunc._soAmI called with', param);
}
}();
然后我们可以从您的PubObj内部访问PrivateFunc。
var PubObj = {
someVar: 1,
getPrivFunc: PrivateFunc,
publicFunc: function(param) {
this.getPrivFunc._iAmPrivate(this.someVar, param);
this.getPrivFunc._soAmI(param);
}
};
当我们调用PubObj.publicFunc('test')时,我们得到:
PubObj.publicFunc('test')
> PrivateFunc._iAmPrivate called with 1 test
> PrivateFunc._soAmI called with test