javascript - 是否可以将函数附加到可以访问类的私有(private)变量的 JS 类?

标签 javascript object prototypejs

我有一个需要转换的现有类,以便我可以在主对象定义之后附加诸如 my_class.prototype.my_funcs.afucntion = function(){alert(private_var);} 之类的函数。将现有类转换为使用此方法的最佳/最简单方法是什么?目前我有一个像这样构造的 JavaScript 对象:

var my_class = function (){

 var private_var = '';
 var private_int = 0
 var private_var2 = '';
 [...]

 var private_func1 = function(id) {
  return document.getElementById(id);
 };

 var private_func2 = function(id) {
  alert(id);
 };

 return{
  public_func1: function(){

  },

  my_funcs: {
   do_this: function{

   },
   do_that: function(){

   }
  }
 }
}();

不幸的是,目前,我需要根据用户选择的设置,使用 PHP 动态向该对象添加函数和方法,可能没有添加函数或 50 个函数。这使得添加功能变得非常复杂,因为要添加 my_class .my_funcs.afunction(); 函数,我必须在 JS 文件中添加一个 PHP 调用以便它可以访问私有(private)变量,这只会让一切变得如此困惑。

我希望能够使用原型(prototype)方法,这样我就可以清除主 JS 文件内的所有 PHP 调用。

最佳答案

尝试像这样声明你的“类”:

var MyClass = function () {
    // Private variables and functions
    var privateVar = '',
        privateNum = 0,
        privateVar2 = '',
        privateFn = function (arg) {
            return arg + privateNum;
        };
    // Public variables and functions
    this.publicVar = '';
    this.publicNum = 0;
    this.publicVar2 = '';
    this.publicFn = function () {
        return 'foo';
    };
    this.publicObject = {
        'property': 'value',
        'fn': function () {
            return 'bar';
        }
    };
};

您可以通过向其原型(prototype)添加属性来扩展此对象(但除非您创建此类的实例,否则它们将不可访问)

MyClass.prototype.aFunction = function (arg1, arg2) {
    return arg1 + arg2 + this.publicNum;
    // Has access to public members of the current instance
};

有帮助吗?

编辑:确保您创建了 MyClass 的实例,否则将无法正常工作。

// Correct
var instance = new MyClass();
instance.publicFn(); //-> 'foo'
// Incorrect
MyClass.publicFn(); //-> TypeError

关于javascript - 是否可以将函数附加到可以访问类的私有(private)变量的 JS 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4027352/

相关文章:

javascript - jQuery 仅在事件中保存最后一个值

javascript - 模仿 [colA] 和 [colB] 之间的 [condition] Sequelize

javascript - Js - 转换对象数据(WP-API)

javascript - 对象的全局变量

java - 如何进行(递归?)自定义反序列化

javascript - Object.defineProperty() vs Object.prototype.property vs Object.property 什么时候用什么?

javascript - 更新选择框而不引起 onChange

javascript - Prototype.js 获取元素值的快捷方式?

ruby-on-rails - rails 2 replace_html将javascript放入页面

javascript - 如何计算网格中随机数的平均值?