如何从原型函数中动态调用JavaScript私有函数?
问题原因
你的_myPrivateFunction是定义在IIFE(立即执行函数表达式)的局部作用域里的,并没有挂载到全局的window对象上,所以用window[functionName]肯定找不到这个函数,自然会报错。
正确实现方法
把私有函数统一放到一个对象中管理,这样就能通过对象的属性名来动态调用:
const MyObject = (function() { // 把私有函数存到一个对象里 const privateFunctions = { _myPrivateFunction: function() { console.log('_myPrivateFunction()'); } }; const _MyObject = function() { console.log('_MyObject'); }; _MyObject.prototype = { myPublicFunction: function() { privateFunctions._myPrivateFunction(); // 直接调用没问题 let functionName = '_myPrivateFunction'; privateFunctions[functionName](); // 动态调用成功 } }; return { init: _MyObject } })(); let obj = new MyObject.init(); obj.myPublicFunction();
如果你的私有函数不需要访问IIFE内部的其他私有变量,也可以把它挂载到构造函数的原型上(但这样就不算严格意义的私有了),不过更推荐上面的方式,既保持私有性又能实现动态调用。
内容的提问来源于stack exchange,提问作者Duddy67
相关产品推荐
相关产品推荐

