我有一个需要转换的现有类,以便我可以在主对象定义之后附加诸如 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/