我正在构建一个加载屏幕的库,它允许我从各种不同的文档中调用Loader.Show(),Loader.Hide()或Loader.Step()。
我已经构建了库,但是我并不完全了解声明对象的各种方法。在以下两个模型中有什么不同,哪个更好?
//Example 1
var Robot = (function () {
var metal = "Steel";
return {
killAllHumans: function() {
alert(metal);
}
}
})();
Robot.killAllHumans();
//Example 2
var NonRobot = {
runState: "Normal",
run: function() {
alert(this.runState);
}
}
NonRobot.run();

我理解示例1&创建对象。我也明白,在例1中,metal是一个私有变量。我不知道如何在示例2中创建私有变量。唯一的区别是范围?
答案 0 :(得分:2)
此方法创建一个私有上下文,您可以在其中添加自己的变量并执行一些中间的evalations甚至创建私有变量,例如metal
var Robot = (function () {
var metal = "Steel";
return {
killAllHumans: function() {
alert(metal);
}
}
})();
另一方面,此版本创建的是一个对象文字:
var NonRobot = {
runState: "Normal",
run: function() {
alert(this.runState);
}
}
NonRobot.run();
runState
不是NonRobot
的私有财产,可以由外部力量操纵。
答案 1 :(得分:0)
在第二个中,您使用Immediately Invoked Function Expression创建对象。