我在javascript中使用IIF有一个澄清。 我已经下载了一个名为test.js的javascript文件,如下所示,我在谷歌搜索IIF后遇到了以下问题:
define(function () {
(function (window) {
this.test = function() {};
Test.prototype.function1 = function(){
//Do something
},
function Delete(){
//Code to Delete
}
window.Delete = Delete;
})(window);
});
我确实有以下问题:
是线,
this.test = function() {};
构造函数?
如果是这样,我可以在一个文件中有2个构造函数,例如:
this.test = function() {};
this.test2 = function() {};
而且,当我知道这是一个自动调用的文件,其中所有内容最初都会被执行时,为什么我需要一个构造函数。
这是私人功能吗?
Test.prototype.function1 = function(){
//Do something
},
这不会自动生效吗?我是否需要创建测试对象然后调用它?
这是公共职能吗?
function Delete(){
//Code to Delete
}
window.Delete = Delete;
上面的最后一行说明了这一点。如果是这样,那么第一和第二函数之间的区别是什么?
这里的关键字window
是什么?
答案 0 :(得分:4)
值得注意的是,此代码会因错误而失败,因为Test
未定义,并且您无法在prototype
上设置undefined
属性。
.prototype
属性添加函数和属性,使用new
从它创建的任何对象都将从原型链中获取它们。在您的情况下,this.test = function(){}
看起来不像原型。return
从函数中公开的内容(或者在您的情况下,通过使用全局window
对象,这被认为是不好的做法)如果Test
函数在某处暴露,那么Test.prototype.function1
也会暴露出来。所有原型方法都是“公开的”。window
对象上,该对象是全局的。从本质上讲,你已经使这个功能成为全球性的。window
是全局浏览器对象。虽然当像(function(window) { ... })(window)
一样使用时,第一个窗口是参数的名称,(以及函数引用中window
的任何实例引用该参数,第二个窗口(传递给函数调用) ,是全局window
对象。进一步阅读: