我正在尝试创建一个由构造时设置的函数修改的类。 问题是,如何让这个函数修改它所分配的类的私有字段。 我创建了一个简化的代码来解释:
https://jsfiddle.net/9zjc0k9e/(代码如下):
要修改的类:
foo = function(options) {
let {func} = options; //The function we send on construction
let a = []; //The variable we are trying to modify with the function
function executer(v) {
func(v);
}
return {executer};
};
主:
//The function we will send when constructing:
let funk = function(v) {
a.push(v); // <- this 'a' is the private member of the class we wanna modify
}
//Construct:
let bar = new foo({
func: funk
});
//Run the function we sent through the public class function assigned to that
bar.executer(1); //<-- Uncaught ReferenceError: a is not defined
我得到的错误是:Uncaught ReferenceError: a is not defined
。
我希望我已经彻底解决了这个问题,有没有办法完成这个? Hack-ish是可以接受的。
答案 0 :(得分:1)
外部函数无法在不传递的情况下查看局部变量a
。该函数尝试在定义它的位置查找变量,意味着外部funk
无法隐式访问foo
的任何变量。如果a
是一个对象变量,您可以通过上下文绑定访问它。
您还需要将a
的引用传递给函数。
let funk = function(v, array) {
array.push(v);
}
通过
致电function executer(v) {
func(v, a);
}
您的代码
foo = function(options) {
let {func} = options;
let a = [];
function executer(v) {
func(v, a);
}
return {executer};
};
let funk = function(v, array){
array.push(v);
}
let bar = new foo({
func: funk
});
bar.executer(1);
&#13;