This question already has answers here:
Understanding module design pattern in javascript
                                
                                    (2个答案)
                                
                        
                        
                            What is the “x = x || {}” technique in JavaScript - and how does it affect this IIFE? [duplicate]
                                
                                    (4个答案)
                                
                        
                                3年前关闭。
            
                    
我在查看this code here时遇到了一种我不太了解的样式。我对Java语言还很陌生,但是这种声明风格与我阅读的各种教程中的实现方式截然不同。

基本上我想知道的是,通过这样做可以完成什么工作?

var Spriter;
(function (Spriter) {
    . . .
})(Spriter || (Spriter = {}));
var Spriter;
(function (Spriter) {
    . . .
})(Spriter || (Spriter = {}));
.
.
.


为什么函数卡在括号之间? (function(Spriter){}后面附加的(Spriter ||(Spriter = {}))是做什么的?为什么多次写“ var Spriter;”,我会认为多个“ var Spriter”是多余的。

就此的目的而言,它允许您在Phaser(游戏引擎)中使用Spriter(在2d动画中使用骨骼的动画师套件)中创建的动画。

最佳答案

var Spriter;
(功能(Spriter){
    。 。 。
})(Spriter ||(Spriter = {}));

该代码正在执行以下操作


首先检查是否定义了Spriter变量
如果Spriter定义了某个值,则它将采用该值。
如果没有值,则会将Spriter初始化为空对象


您可以使用以下代码段来清楚地了解



var Spriter;
(function (Spriter) {
   alert(Spriter.name);
})(Spriter || (Spriter = {"name":"xyz"}));







var Spriter={"age":10};
(function (Spriter) {
   alert(Spriter.name);
})(Spriter || (Spriter = {"name":"xyz"}));





在这里,因为Spriter不为空,所以它将获取Spriter的值并且不显示值名称,因为在Spriter对象中没有定义为name的属性

希望这可以帮助

07-28 07:25