从外部访问匿名函数内部的变量
access variable inside anonymous function from outside
jquery ui对话框小部件被封装在一个匿名函数中(就像所有其他小部件一样)。
在这个函数中,有一个声明为sizeRelatedOptions
的变量。我需要从包装闭包的外部为该对象添加一个键。实现这一目标的最佳方式是什么?
(function( $, undefined ) {
var sizeRelatedOptions = {
buttons: true,
height: true,
//etc
}
$.widget( "ui.dialog", {
//widget code
});
}( jQuery ) );
编辑#1:以上代码是jQuery ui 的源代码
编辑#2:我现在明白了,我不能简单地访问那个变量。所以我必须解决这个问题。因此,这里有一些关于我为什么需要这个的更多信息:
我正在扩展jQueryui的对话框小部件,以添加另一个按钮窗格。为了在将窗格添加到小部件后使小部件自行调整大小,我想在sizeRelatedOption
中添加一个选项。(这就是这个问题最初的内容。)因为对话框小部件的_options
功能会检查选项是否作为键存在于sizeRelatedOption
中。在这种情况下,它调用_size
函数来调整小部件的大小。
希望我能把自己说清楚一点。
如果不直接修改源代码,你就无法做到这一点,但这不是你应该考虑的选项,因为这是一种非常糟糕的做法,原因有很多。
变量对该作用域是私有的,除非对象使其可以公开访问,否则您的代码必须在声明变量访问它的作用域的相同作用域或子作用域中运行。
但是,如果您试图更改一些配置选项,那么小部件已经为此提供了一个API。
例如,
$('#dialog').dialog({
height: 500,
width: 500
});
编辑:如果你能给我们更多关于你为什么要努力实现这一目标的细节,我们可能会给你其他选择。
将窗口对象传递给函数,然后可以为其附加方法和属性。
(function( $, window, undefined ) {
window.sizeRelatedOptions = {
buttons: true,
height: true,
//etc
}
$.widget( "ui.dialog", {
//widget code
});
}( jQuery, window ) );
您应该在全局作用域中声明此变量。您可以使用$.extend为现有对象添加属性。
window.sizeRelatedOptions = {};
(function( $, undefined ) {
$.extend(sizeRelatedOptions , {
buttons: true,
height: true,
//etc
});
$.widget( "ui.dialog", {
//widget code
});
}( jQuery ) );
var accessor = (function( $, undefined ) {
var sizeRelatedOptions = {
buttons: true,
height: true,
//etc
}
$.widget( "ui.dialog", {
//widget code
});
return {
getSizeRelatedOptions: function () { return sizeRelatedOptions; }
}
}( jQuery ) );
accessor.getSizeRelatedOptions();
我认为如果不修改小部件的源代码,这是不可能的。
您可以将其设置为全局变量:
var window.sizeRelatedOptions = { // now it's a global
不过,最好让匿名函数返回变量:
var myvar = (function( $, undefined ) {
var sizeRelatedOptions = {
buttons: true,
height: true,
//etc
};
var returnvar = sizeRelatedOptions; // in case sizeRelatedOptions is modified
$.widget( "ui.dialog", {
//widget code
});
return returnvar;
}( jQuery ) ); // now myvar contains the same data
- javascript闭包:保护内部变量
- 在jQuery中克隆/附加大型HTML块,但更改内部变量
- 我们如何在外部的节点 js 中使用函数调用中的内部变量
- JavaScript 访问 Firefox 中的 iframe 内部变量
- 在这个 JavaScript 代码中,为什么有些函数可以访问内部变量,而另一些则不能
- 访问 JavaScript 对象中的内部变量
- 如何在Javascript中更改函数内部变量的值
- 内部变量赋值'如果'条件
- jQuery-函数内部变量的声明将停止解析
- 破解JS:关于混合一些对象作为外部函数(如**kwargs)的参数(或内部变量)的想法,不使用它
- Javascript:用外部函数更改内部变量
- 函数内部变量的Javascript提升
- 为什么我可以't访问“;内部变量“;在我的javascript代码中使用事件绑定
- 函数内部变量的值不正确
- 尝试在javascript中模拟类,但无法到达内部变量
- 从函数返回内部变量和直接返回值之间有区别吗?
- JavaScript:初始化对象后初始化内部变量
- 自执行函数中的内部变量处理
- 为什么外部作用域变量不能正确地绑定到内部变量?
- 是否有一个API为chrome://web内部/变量在javascript