我正在查看Scrabb.ly的js源代码.
我注意到他们会为每个不同的"类"做类似的事情:
var Board = (function() {
var self = {};
// settings for board
self.options = {
debug: true,
addedPlayTiles: function() {},
clearedPlayTiles: function() {}
};
// set to true once the board has been setup
self.isSetup = false;
// quick access to square elements
self.squares = {};
self.squareCount = 0;
self.setup = function(options) {
self.log("Setting up board!");
// set options
_.each(options, function(val, key) {
self.options[key] = val;
});
return self;
})();
Run Code Online (Sandbox Code Playgroud)
中间的一些代码已被省略,但这应该给你一般的想法.
(function() { // code })(); 是什么目的:这是我见过的模块模式吗?这是否意味着保持全局命名空间的清洁?var self = {} 自我对象是否用于暴露"公共"成员?你会如何定义私有函数或变量?Cri*_*hez 11
它被称为模块模式.
函数周围的括号表示它在被定义后立即被评估 - 所以本质上它是一个单例.由于它是一个匿名函数,因此不会存储定义 - 因此您无法轻松创建此对象的新实例而无需进行一些修改(稍后将对此进行讨论).
你是对的,self 包含"公共"方法和属性.self由于闭包属性,任何未定义的变量对外部都不可见.但是,定义的任何函数self仍然可以访问私有变量,因为在Javascript中,函数维护对定义它们的上下文(包括变量)的访问 - 除了少数例外..主要arguments和this.
如果要定义此对象的多个实例,则应删除括号(var Board = function () { ... }),然后使用var obj = Board()创建对象.请注意,它不使用new运算符.
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |