我一直在研究一个JS项目,在安装JSHint以保持我的JS排队之前从未参与过正确的JS项目。这导致我查看“使用严格”定义,这导致我阅读有关匿名函数的内容。现在我真的很困惑。我不知道如何正确定义我的对象。
我决定查看一些公共js库(主要是Bootstrap),了解它们的工作方式。
这是我看到的一般模式:
(function($) {
'use strict';
var MyObject = function() {
// ...
}
// Prototype methods
})(jQuery);
我的问题是外部脚本如何看到对象?我希望能够从初始化程序传递对象两个ID。
答案 0 :(得分:1)
这是一个IIFE(立即调用函数表达式)。
它故意不创建全局变量。它用于保持命名空间的清洁。它还将$变量(定义为jQuery)作为参数传递,以便它可以访问jQuery,而无需引入可能使用用户可能正在实现的$符号的任何其他库。
我认为您可能希望更多地了解构造函数/模块/原型继承模式,并对使用IIFE的原因进行一些研究(它们对哪些情况有利/不利)。
如果你想使用IIFE并拥有一个传递参数的函数,或者从内部定义参数变量(不会污染命名空间),你可以在IIFE内部进行。
脱离我的头顶例子:
(function(){
var Foo = function(arg){
};
Foo.prototype.something = function(){
do something;
};
var Bar = function(){
do something;
return arg;
};
var baz = new Foo(bar());
baz.run();
//or
var ex = something you want to pass as an arg;
var baz = new Foo(ex);
baz.run();
})();
答案 1 :(得分:0)
您可以按以下方式导出MyObject
(function(window){
var MyObject = function....
MyObject.prototype. something...
window.MyObject=MyObject;
}(window));
更多关于构造函数,原型和继承的信息:https://stackoverflow.com/a/16063711/1641941