我知道棱角被添加到窗口,但looking through the library,我找不到在哪裏!向窗口對象添加角度的代碼行在哪裏?
Angular包含在一個IIFE中,所以在代碼中它實際上被添加到窗口中了嗎?
我知道棱角被添加到窗口,但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