【发布时间】:2016-02-01 04:38:28
【问题描述】:
我试图更好地理解 javascript 中的命名空间,并找到了一个将窗口对象作为参数的 javascript 立即调用函数表达式的示例。这是其中的代码:
var CG = CG || {};
CG.main = (function(window) {
var FOCAL_LENGTH = 8.0;
var context, width, height, startTime;
var init = function() {
var element = document.getElementById("canvas1");
context = element.getContext("2d");
width = element.width;
height = element.height;
startTime = (new Date()).getTime() / 1000.0;
tick();
}
var original_onload = window.onload || function() {};
window.onload = function() {
original_onload();
CG.main.init();
}
return {
init: init,
draw: draw_shape,
clear: clear_canvas
};
}(window));
在命名空间定义的末尾,括号中有一行窗口,我对它的功能感到困惑。我认为将 window 参数添加到定义末尾的目的是将全局 window 变量绑定到命名空间,然后将不同的属性添加到窗口,但我不能确定。
在另一个例子中,有一个随机变量名传入命名空间的定义中,在命名空间定义的最后,命名空间的实际名称作为参数传递:
var namespace = namespace || {};
// here a namespace object is passed as a function
// parameter, where we assign public methods and
// properties to it
(function( o ){
o.foo = "foo";
o.bar = function(){
return "bar";
};
})(namespace);
console.log(namespace);
所以这里真的有几个问题:
在命名空间定义末尾传递参数有什么作用?
如果我对这一切如何运作的直觉不正确,那么这种命名空间创建 javascript 的一般结构是什么?
显然我对此很陌生,因此我们将不胜感激,谢谢。
【问题讨论】:
-
这只是一个对象作为参数传递给函数。它没有什么特别之处。
-
使用您的第二个示例代码,将其重写为您习惯的函数,而不是 IIFE。括号现在是什么意思?
标签: javascript namespaces