向窗口对象添加角度的代码行在哪里?
问题描述:
我知道棱角被添加到窗口,但looking through the library,我找不到在哪里!向窗口对象添加角度的代码行在哪里?
Angular包含在一个IIFE中,所以在代码中它实际上被添加到窗口中了吗?
答
它被通过调用ensure
方法初始化的方法调用setupModuleLoader
下面:
function ensure(obj, name, factory) {
return obj[name] || (obj[name] = factory());
}
var angular = ensure(window, 'angular', Object);
该代码被首先检查是否存在与名称angular
可用对象在窗口对象中,如果没有,则创建一个Object
的新实例并将其指定给angular
变量。
更新:
在Javascript中,如果我们想创建一个新的实例,我们可以用三种不同的方式创建的任何功能的新实例:
function A() {
// some code
}
var a1 = new A();
var a2 = new A;
var a3 = A();
所以,我们传递Object
类并接受factory
变量,并通过调用factory()
我们正在创建一个新的对象实例,它将被分配到angular
变量中。
答
主要是这几行代码将窗口赋值给$ window。这个代码是从角库采取:
$provide.provider({
$window: $WindowProvider,
});
function valueFn(value) {return function() {return value;};}
function $WindowProvider() {
this.$get = valueFn(window);
}
不错!谢谢。我看到这是在setupModuleLoader(窗口)内部,它又在publishExternalAPI内调用,它在文件的最后被调用。所以我猜想,角色正在做的是等待所有内容完全初始化,然后将其发布到窗口上的属性。还有什么有趣的我应该知道这一切? – richard
还有一个问题......功能工厂()在哪里? – richard
它看起来像在调用Object()。那里发生了什么? – richard