Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问包含函数_Javascript_Function_Object - Fatal编程技术网

Javascript 访问包含函数

Javascript 访问包含函数,javascript,function,object,Javascript,Function,Object,所以,我正在研究一个使用函数构造函数生成函数的库 每个生成的函数都将有一个属性附加到名为default的函数,用于存储选项参数的默认值 像这样: var generated_function = function( arg1, arg2, options_arg ){ ... } generated_function.default = {} 将默认值附加为函数的属性而不是将其存储在函数中的原因如下: var generated_function = function( arg1, arg2,

所以,我正在研究一个使用函数构造函数生成函数的库

每个生成的函数都将有一个属性附加到名为
default
的函数,用于存储选项参数的默认值

像这样:

var generated_function = function( arg1, arg2, options_arg ){ ... }
generated_function.default = {}
将默认值附加为函数的属性而不是将其存储在函数中的原因如下:

var generated_function = function( arg1, arg2, options_arg ){
  default = {}
}
var generated_function = function( arg1, arg2, options_arg ){ 
  ...
  generated_function.default ... //do something with it
  ...
}
generated_function.default = {}
如果需要,我希望在运行时更改默认设置

例如,你的默认选项是一个由100个甚至1000个属性组成的巨大对象,而你的辩论选项的大小平均只有默认值的25%

假设你调用这个函数100或1000次,每次调用你都会更改辩论选项,但只更改默认选项,最多只能更改2次

现在我可以把默认选项和参数中的参数选项一起传递,但是这需要创建很多非常大的对象并传递给生成的函数。这是一个内存问题

我负担不起这个脚本的内存问题。请记住,函数是生成的,这意味着我还面临着这样一个问题:将所有大小和频率的数据传递给一个函数,而不是多个函数

我需要的是能够访问附加的属性,但我不能这样做:

var generated_function = function( arg1, arg2, options_arg ){
  default = {}
}
var generated_function = function( arg1, arg2, options_arg ){ 
  ...
  generated_function.default ... //do something with it
  ...
}
generated_function.default = {}
因为函数的名称是自动生成的,这意味着很难像我那样通过名称访问函数,并且函数可以在另一个生成的函数中生成,这意味着我必须处理范围问题

因此,基本上,我要寻找的是以下几点:

var generated_function = function( arg1, arg2, options_arg ){ 
  ...
  containing_function.default ... //do something with it
  ...
}
generated_function.default = {}
所以我可以在生成的场景中这样使用它:

( window[ somerandomlygeneratedstring ] = function( arg1, arg2, options_arg ){ 
  ...
  containing_function.default ... //do something with it
  ...
  ( someobjectthatcannotbetracked[ somerandomlygeneratedstring ] = function( arg1, arg2, options_arg ){
    ...
    containing_function.default ...
    ...
  } ).default = { ... }

} ).default = { ... }

您可以使用
参数.callee
访问当前函数。这里

var generated_function = function( arg1, arg2, options_arg ){ 
  ...
  arguments.callee.default ... //do something with it
  ...
}
generated_function.default = {}

函数表达式可以具有仅在函数中可用的可选名称,因此:

var generated_function = function whatever( arg1, arg2, options_arg ){ 
  ...
  whatever.default ... //do something with it
  ...
}
所有生成的函数都具有相同的名称并不重要

IE up(包括版本8)中存在一些问题,但如果名称选择正确,则在本例中不会出现问题

例如

var fn0=函数foo(){
控制台日志(foo.props.bar);
}
fn0.props={bar:'f0旧bar'};
var fn1=函数foo(){
控制台日志(foo.props.bar);
}
fn1.props={bar:'f1 old bar'};
//呼叫fn0,更换道具,再次呼叫
fn0();
fn0.props.name='f0新条';
fn0();
//呼叫fn1,更换道具,再次呼叫
fn1();
fn1.props.name='f1新条';

fn1()arguments.callee,最好为函数表达式指定一个名称并使用该名称。或者只是使用一个函数声明。我认为这行不通。如何重复生成命名函数而不引起内存问题?我认为您必须更改新函数的名称选择,以避免删除objectIt works函数,我添加了一个示例。添加名称如何导致内存问题?该名称仅在函数内部可用,因此可以重用。