我是封闭的新手,
我正在阅读教程:https://developers.google.com/closure/library/docs/tutorial
它说
goog.provide('tutorial.notepad.Note');
相当于
tutorial = tutorial || {};
tutorial.notepad = tutorial.notepad || {};
tutorial.notepad.Note = tutorial.notepad.Note || {};
基于这个事实,我假设如果使用
goog.provide('tutorial.notepad.Note');
那么就没有必要使用
goog.provide('tutorial.notepad);
但是这个例子同时使用了它们。
有人可以向我解释为什么吗?
最佳答案
goog.provide(namespace)
将检查从左边开始的每个点分隔的名称,并创建一个属性指向一个新的对象文字,相当于 tutorial你上面提供的摘录。因此,您是正确的 notepad.js技术上不需要包含 goog.provide('tutorial.notepad')
, 自 goog.provide('tutorial.notepad.Note')
将确保对象链tutorial.notepad
存在。
但是,除了定义一个 Note
具有成员函数的对象 makeNoteDom
,notepad.js 还定义了一个实用函数 makeNotes
,它是 tutorial.notepad
的成员命名空间。通过包含 goog.provide(tutorial.notepad)
,表示notepad.js除了定义一个Note
之外,还提供了包级别的功能。目的。
关于namespaces - 在闭包库中使用提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751499/