如何检查对象内是否存在私有函数?
var myObj = function(){
var myFunc = function(){};
var init = function(){
//has myFunc been defined?
}
}
我知道我可以这样做:
if (typeof myFunc == 'function') {
//myFunc exist
}
但这是在检查全球范围 如何将其限制在我的对象范围内?
以下是我需要的最简化的案例:
var myComponent = function () {
var exportExcel = function () {
};
this.export = function (type) {
if('export'+type is a private function in this scope){
window["export"+type]()//but in local scope;
}
}
};
这是我现在的工作:
var myComponent = function () {
var Exports = {
Excel: function () {
}
};
this.export = function (type) {
if (Exports.hasOwnProperty(type)) {
Exports[type]();
} else {
alert('This Export type has not been implemented Yet ! or it never will ... how knows? well i don\'t ...');
}
}
};
答案 0 :(得分:1)
你可能已经注意到了:
function myFunc () {};
function myObj () {
function init () {
if (myFunc) // passes
};
}
你可以作弊: - |
function myObj () {
var isdef = { myFunc: true };
function myFunc () {};
function init () {
if (isdef.myFunc) // do something
};
}
我想知道为什么会这样做。
答案 1 :(得分:1)
基于给出的额外信息,最实用的模式是您所谓的“临时解决方法”:将您的函数保存在私有对象中,按类型键入。
var myComponent = function () {
var exporters = Object.create(null, {
"Excel": function () {
// do magic export here
}
});
this.export = function (type) {
if (type in exporters) {
// defined locally
return exporters[type].call(this); // binding is optional
} else {
// no export for you!
}
}
};
这可以防止两件事:
这可能不是您的设计原则,您可以进一步扩展此代码以允许添加/删除导出器。