Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript模块模式Noob_Javascript_Module Pattern_Revealing Module Pattern - Fatal编程技术网

Javascript模块模式Noob

Javascript模块模式Noob,javascript,module-pattern,revealing-module-pattern,Javascript,Module Pattern,Revealing Module Pattern,我正在开办艾迪·奥斯马尼餐厅,但似乎还没起步。有人能告诉我我的方法有什么问题吗(我用拉斐尔,只是为了好玩。): 你的方法有什么问题吗?是暴露还是其他。如果您打算使用它,请使用它,并使该函数自调用: var myScene = function() { var c1 = myPaper.circle(50, 50, 40); var c2 = myPaper.circle(50, 150, 40); var c3 = myPaper.circle(50, 250, 40); c2

我正在开办艾迪·奥斯马尼餐厅,但似乎还没起步。有人能告诉我我的方法有什么问题吗(我用拉斐尔,只是为了好玩。):

你的方法有什么问题吗?是暴露还是其他。如果您打算使用它,请使用它,并使该函数自调用:

var myScene = function() {
  var c1 = myPaper.circle(50, 50, 40);
  var c2 = myPaper.circle(50, 150, 40);
  var c3 = myPaper.circle(50, 250, 40);

  c2.attr("fill", "red");  // yep!

  return {
      firstCircle: c1         // ← refer to a variable which is actually defined
  };
}();                          // ← parens go here
以后不要将
myScene
作为函数调用,因为它不是函数,并且匿名函数已经被调用。看,你仍然可以进入那个圈子

console.log(myScene.firstCircle); // z {0: circle.[object SVGAnimatedString], node: circle.[object SVGAnimatedString], id: 0, matrix: cb, realPath: null, paper: j…}
如您所发现的,省略括号(调用匿名函数)会导致非常不同的结果

你的方法有什么问题吗?是暴露还是其他。如果您打算使用它,请使用它,并使该函数自调用:

var myScene = function() {
  var c1 = myPaper.circle(50, 50, 40);
  var c2 = myPaper.circle(50, 150, 40);
  var c3 = myPaper.circle(50, 250, 40);

  c2.attr("fill", "red");  // yep!

  return {
      firstCircle: c1         // ← refer to a variable which is actually defined
  };
}();                          // ← parens go here
以后不要将
myScene
作为函数调用,因为它不是函数,并且匿名函数已经被调用。看,你仍然可以进入那个圈子

console.log(myScene.firstCircle); // z {0: circle.[object SVGAnimatedString], node: circle.[object SVGAnimatedString], id: 0, matrix: cb, realPath: null, paper: j…}
如您所发现的,省略括号(调用匿名函数)会导致非常不同的结果


您没有在任何地方定义var
circ1
,只是
c1
@dominic right,这是一个打字错误。但这不是问题所在。。。我修正了。你没有在任何地方定义var
circ1
,只是
c1
@dominic right,这是一个打字错误。但这不是问题所在。。。我修好了。非常感谢马特。问题是,我确实希望以后能够使用公共指针调用该函数。当我重构您的代码来实现这一点时,我遇到了一个类似的问题:为什么您希望以后能够调用它?一个模块不应该是一个函数;它是相关功能的自包含逻辑单元。如果您希望它可重用并应用于页面上的不同位置,请不要创建/使用模块。创建并使用一个类。好吧,它稍后会根据一系列条件因素调用。(为了这个例子,我正在大大简化。)它不需要可重用,也不需要多次调用。我不想偏离主题,但我对javascript的理解是没有类。我真的只是想弄明白为什么myScene.secondCircle在第二把小提琴中返回undefined…
myScene.secondCircle
是未定义的,因为
c2
未定义的
当定义
renderCircles
的对象返回时。而且肯定有课!哦,老兄,我就知道你要去那里。我非常感谢你的帮助,但是关于计算机科学中“类”的性质的学术辩论现在对我并没有真正的帮助:)FWIW,因为我相信你知道这里有一个关于术语的辩论:如果renderCircles()已经运行了,这不就是c2的定义吗?非常感谢Matt。问题是,我确实希望以后能够使用公共指针调用该函数。当我重构您的代码来实现这一点时,我遇到了一个类似的问题:为什么您希望以后能够调用它?一个模块不应该是一个函数;它是相关功能的自包含逻辑单元。如果您希望它可重用并应用于页面上的不同位置,请不要创建/使用模块。创建并使用一个类。好吧,它稍后会根据一系列条件因素调用。(为了这个例子,我正在大大简化。)它不需要可重用,也不需要多次调用。我不想偏离主题,但我对javascript的理解是没有类。我真的只是想弄明白为什么myScene.secondCircle在第二把小提琴中返回undefined…
myScene.secondCircle
是未定义的,因为
c2
未定义的
当定义
renderCircles
的对象返回时。而且肯定有课!哦,老兄,我就知道你要去那里。我非常感谢您的帮助,但是关于计算机科学中“类”的性质的学术辩论现在对我并没有真正的帮助:)FWIW,因为我相信您知道这里有一个关于术语的辩论:如果renderrcles()已经运行了,这不就是c2的定义吗?