我有一点不明 ,为何他外面要套function(global){}(this).视频中说这是要防止变量或者内部函数泄露!!于是,为题来了,外部的对象是如何以里面的函数做为构造器的?东西都被封死了,如何在外部实例化?看了整个视频,就这里不理解
Object.defineProperties(global, {
DetectorBase: { value: DetectorBase },
LinkDetector: { value: LinkDetector },
ContainerDetector: { value: ContainerDetector },
});
// 上边的定义把这些变量挂载到global上了,在浏览器相当于window.DetectorBase = DetectorBase;
Object.defineProperties在全局定义了与那几个构造函数同名的属性,这些属性的值就是这几个构造函数,所以可以在全局通过这些属性访问到构造函数
仅仅是立即执行的匿名函数,不是块级作用域 [块级作用域方法 (function (){})() 块级作用域 函数外层有括号],这里写错啦,不好意思
构造函数 和 原型对象的方法 都是 在 第一个 立即执行的匿名中(模拟的块级作用域:貌似),其中通过 Object。defineProperties 将部分 方法提升 到全局作用域 ,图中标蓝部分。所以外部可以使用。(貌似是这样的,如有不准确,请指正)