【发布时间】:2014-07-10 14:23:44
【问题描述】:
我在 HTML5/javascript/css 的培训指南中遇到了以下示例
我不明白为什么将方法中的私有变量作为私有变量添加到底层对象/命名空间 ns 中。
(function () {
this.myApp = this.myApp || {};
var ns = this.myApp;
var vehicleCount = 5;
var vehicles = new Array();
ns.Car = function () { }
ns.Truck = function () { }
var repair = {
description: 'changed spark plugs',
cost: 100
};
}());
这是本书给出的解释:
IIFE(读作 iffy)是一个匿名函数表达式,它的末尾有一组括号,表示您要执行该函数。匿名者 函数表达式被包裹在括号中,以告诉 JavaScript 解释器该函数不仅被定义;它也在文件加载时执行。 在这个 IIFE 中,如果 myApp 命名空间不存在,第一行将创建它,这 表示用作命名空间的单例对象。接下来,创建一个 ns 变量(用于命名空间)作为命名空间的别名,以保存 IIFE 中的类型,因此 ns 可以 用于代替 this.myApp。之后,定义命名空间的私有成员 通过使用 var 关键字。 Car 和 Truck 是公共的,因此它们以 ns 为前缀。
如果他们想将这些属性设置为 myApp“命名空间”的私有属性,我希望使用以下代码
(function () {
this.myApp = this.myApp ||
{
var ns = this.myApp;
var vehicleCount = 5;
var vehicles = new Array();
var repair = {
description: 'changed spark plugs',
cost: 100
};
};
ns.Car = function () { }
ns.Truck = function () { }
}());
【问题讨论】:
-
给定的代码甚至在strict-mode 中都不起作用。所以,说实话,再买一本书/指南。
-
关于此主题的大量 SO 信息。一些参考adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html
-
从官方的 MS 书籍 70-480 HTML5/javascipt/css 中得到这个。只是不明白这些 var 是如何与 ns 对象/命名空间相联系的
-
@Upperstage 谢谢你,你的链接清楚地说明了发生了什么:)
标签: javascript scope