匿名自执行方法体(function(){})经常用在设计JS插件上面,它定义相关组件的行为,自动初始化相关属性,而且在页面中可以直接执行,你不需要手动执行它,它被自动被执行!

在设计你的匿名自执行方法体时,我们有几点需要注意,在这里大叔部总结了一下,请看下面说明

  • 将它的结果赋给一个对象
  • 如果它没有返回值,那希望使用它的内部对象,需要这个对象是公共的(即不可var)
  • 可以将它定义成一个自执行的属性体

具体介绍这三点

将它的结果赋给一个对象

var ar = (function () {
var PageMap = function () { console.log("初始化") };
PageMap.prototype = {
get: function (page) {
return page;
},
set: function (page, value) {
console.log("set");
},
has: function (page) {
return false;
},
clear: function () {
console.log("clear");
}
};
return PageMap;
})();

var a = new ar();
a.set(1, "OK");

如果它没有返回值,那希望使用它的内部对象,需要这个对象是公共的

(function (option) {
option = option || { id: 0, pages: [] };
var pages = [];

Maps = function () {
console.log("maps init...");
};

//扩展方法
Maps.prototype = {
keys: function () {
return pages[id] != undefined;
},
get: function (id) {
return pages[id];
},
set: function (value) {
pages.splice(value);
pages.push(value);
},
append: function (value) {
pages.push(value);
},
each: function () {
console.log("eache pages result");
for (var item in pages)
console.log(pages[item]);
}
};

})();

var arr = new Maps();
arr.append(1);
arr.append(2);
arr.append(3);
arr.each();

可以将它定义成一个自执行的属性体

var test = ({
// 这里你可以定义常量,设置其它值, 自动运行
width: 480,
height: 640,

// 当然也可以定义utility方法
getMax: function () {
return this.width + "x" + this.height;
},

// 初始化
init: function () {
console.log(this.getMax());
// 更多代码...
},

print: function () {
console.log(this.getMax());
}
}); // 这样就开始初始化咯
test.init();
test.print();

而对于以后我们的JS组件的设计,可以很好的利用它的这些特点,即自执行

 

作者:仓储大叔,张占岭,
荣誉:微软MVP