javascript - 这个 javascript 对象字面量表示法有什么问题?

标签 javascript scope encapsulation object-literal

考虑到神圣的全局命名空间,我正在尝试为我的网站实现一个 .js 文件。这次我想以正确的方式来做,所以请帮我解决这个可能太简单的问题:

到目前为止我所拥有的:

var myJSFile = (function () {

  function a (){
  } 
  function b (){   
  }

  return {
    global1 : 0,
    global2 : 0,             

    functionc :  function (){
      a();
    },

    functiond : function () {
      a();
      b();
    }
  }; 
})(); 

你看,我想要一个全局变量“myJSFile”,以便在全局范围内显示。还有两个私有(private)函数(a,b),两个全局变量(global1, global2)和两个全局函数(functionc, functiond ). 这段代码确实有效,但 netbeans 似乎喜欢它。 netbeans 在其导航器中向我展示的唯一一件事是全局变量“myJSFile”。没有私有(private)的,没有公共(public)的功能,没有其他变量。我真的需要它,因为会有很多功能。

这让我觉得,我做的事情完全错了。所以请给我一些关于如何修复此代码并成为更好的 js 程序员的建议。

提前致谢!

编辑: 我知道,如何处理这个对象并像这样使用它:

myJSFile.global1 = anything;
myJSFile.functionc();

这里对我来说问题是 netbeans 中的导航器,它让我认为我做错了什么,因为没有向我显示任何东西。

编辑(二): 似乎 netbeans 已更新。现在可以识别功能等等。

最佳答案

您正在创建一个对象。因此,您的“公共(public)”函数将是 myJSFile 对象的属性。所以以下应该有效:

// Public functions
myJSFile.functionc(); // calls a()
myJSFile.functiond(); // calls a() then b()


// Public properties
myJSFile.global1; // 0
myJSFile.global2; // 0

这是module 模式的一个例子。您可以阅读更多相关信息 here !

关于javascript - 这个 javascript 对象字面量表示法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730444/

相关文章:

python - 在函数之间使用用户输入时遇到问题

javascript - 在单个命名空间下组合 javascript 伪类对象

javascript - jQuery 将 data-* 属性转换为小驼峰属性

javascript - .map() 函数返回一个数组数组而不是对象数组

javascript - JavaScript 模块模式中的方括号符号和作用域

c# - 澄清我对 C# 封装的理解

java - 访问私有(private)字段

Javascript:以编程方式触发 onbeforeunload/onunload 事件

javascript - 将 javascript 添加到 wordpress functions.php

java - 正在访问哪个变量,本地或类级别?