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,这是一个打字错误。但这不是问题所在。。。我修正了。你没有在任何地方定义varcirc1
,只是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的定义吗?