js函数放在一个对象中

时间:2014-10-06 23:22:29

标签: javascript function object

我已经看到嵌入在结构中的功能,并且想知道这是不是很好的做法。我附上一段Java脚本来说明这一点。数字指代码流程。遵循这一流程似乎相当困难。 谢谢



anObject = {}; // an empty object
anObject.theGuts = (function() {
  console.log('In anObject.theGuts'); // #1
  theGuts = function(n) {
    this.n = n;
    console.log('theGuts called with:');
    console.log(this.n); // #6
  }
  return theGuts;
})();

anObject.theGame = (function() {
  function theGameGuts() {
    console.log('In theGameGuts'); // #4
    this.initGame();
  }
  var p = theGameGuts.prototype;
  p.initGame = function() {
    console.log('in initGame'); // #5
    anObject.theGuts(2);
  }
  return theGameGuts;
})()

console.log('the anObject');
console.log(anObject); // #2

window.onload = function() {
  console.log('In window.onload'); //#3
  // entry point
  var game = new anObject.theGame();
  console.log('the game: ');
  console.log(game); // #7
};

<head>
  <meta charset="utf-8">
  <title>An edmbed test</title>

  <script type="text/javascript">
    function init() {

    }
  </script>

</head>

<body>Some text
  <script type="text/javascript" src='javaScript.js'></script>
</body>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

  

我已经看到嵌入在结构中的功能,并且想知道这是不是很好的做法

是。构造代码(在这种情况下,将函数放在&#34;命名空间&#34;)总是一个好主意。

使用(揭示)模块模式通常也是一个好主意,虽然这里可能有点过度使用 - 而不是每个属性使用一个IIFE,可能使用了一个,整个anObject的较大的一个。取决于实际代码中各部分之间的密切关系。


但有一些具体的改进点:

anObject.theGuts = (function() {
  … theGuts
})();

这个IIFE似乎毫无意义,因为它没有建立任何局部变量。此外,由于theGutsanObject对象的方法,因此最好直接在其上分配 - 当需要闭包时,它应该包装整个对象声明。

  console.log('In anObject.theGuts'); // #1

不确定这是否会增加您对代码流的混淆,但IIFE最好不要有任何副作用(包括没有记录)。

  theGuts = function(n) {

你在这里missing a var

    this.n = n;

您的方法在此创建属性?如果这是宣布&#34;那会更好。在对象本身之前。

  function theGameGuts() {

构造函数的名称应大写:TheGameGuts

    this.initGame();
  }
  theGameGuts.prototype.initGame = function() {
    …
  }

除了您打算单独调用.initGame()之外,实例的初始化应该直接在构造函数本身中完成。不要使用init方法 - 它们只会弄乱您的代码流。