javascript - 从其他范围访问对象(javascript)

标签 javascript jquery

Possible Duplicate:
Is it possible to gain access to the closure of a function?

请看一下这段代码:http://jsfiddle.net/FH6pB/1/

(function($) {
  var o1 = {
    init: function() { alert('1'); },
  }
  var o2 = {
    init: function() { alert('2'); },
  }
}(jQuery));

(function($) {
  var o3 = {
    init: function() { alert('3'); },
  }
  o2.init();
}(jQuery));


o1.init();
o2.init();

我在 2 个不同的“范围”中有 3 个对象(我不知道这里用这个词是否正确,但我想你明白这个意思)。 您可能知道,我无法从外部或其他“范围”访问对象的功能(o.init(); 都不起作用)。

为什么会发生这种情况?有办法改变吗?

我知道我可以将代码放在一个作用域中并且它会很好地工作,但是如果我在单独的 JS 文件中有作用域怎么办?

提前致谢, 本

最佳答案

不,您不能从外部访问闭包中声明的变量。这就是闭包的工作原理。

一个(通常不好的)解决方案是将变量声明为全局变量:

(function($) {
  window.o2 = {
    init: function() { alert('2'); },
  };
}(jQuery));

o2.init();

但通常,模块模式用于将一些变量设为私有(private)并仅返回有用的变量。请参阅this article .

关于javascript - 从其他范围访问对象(javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304952/

相关文章:

javascript - 为什么添加括号可以防止错误?

javascript - `inline-block` 父元素宽度错误

javascript - 用于深层和浅层嵌套 UL/LI 列表的简单可折叠列表函数 (JQuery)

javascript - jQuery 动画/悬停和淡入淡出

javascript - 将 ajax 请求添加到附加了先前 ajax 请求的元素

javascript - 立即导航到第一个 <p :menuitem> when <p:submenu> itself is clicked

javascript - 如何使用 XMLHttpRequest ajax 将值从 cgi Cpp 返回到 HTML?

javascript - 当实际上没有要添加的值时向对象值添加值

javascript - JSFiddle 问题 : Function Is Not defined

javascript - AngularJS 架构