我已经看到嵌入在结构中的功能,并且想知道这是不是很好的做法。我附上一段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;
答案 0 :(得分:0)
我已经看到嵌入在结构中的功能,并且想知道这是不是很好的做法
是。构造代码(在这种情况下,将函数放在&#34;命名空间&#34;)总是一个好主意。
使用(揭示)模块模式通常也是一个好主意,虽然这里可能有点过度使用 - 而不是每个属性使用一个IIFE,可能使用了一个,整个anObject
的较大的一个。取决于实际代码中各部分之间的密切关系。
但有一些具体的改进点:
anObject.theGuts = (function() { … theGuts })();
这个IIFE似乎毫无意义,因为它没有建立任何局部变量。此外,由于theGuts
是anObject
对象的方法,因此最好直接在其上分配 - 当需要闭包时,它应该包装整个对象声明。
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
方法 - 它们只会弄乱您的代码流。