var baz;
(function() {
var foo = 10;
var bar = 2;
baz= function() {
return foo*bar;
}
})();
baz();本文为学习《Javascript设计模式》一书后总结而来
怎么个灵活法?就是我们如果想要实现一个功能,可以通过各种不同的方式来实现。比如,现在,我想要实现开始某些动作(startOperation),和结束某些动作(endOperation)的功能.
function startOperation() {
...
}
function endOperation() {
...
}
var Operation= function() {
...
}
Operation.prototype.startOperation=function() {
...
}
Operation.prototype.endOperation=function() {
...
}
//调用函数
var mOperation = new Operation();
mOperation.mOperation();
...
mOperation.endOperation();
var Operation= function() {
...
}
Operation.prototype = {
startOperation: function() {
...
},
startOperation: function() {
...
}
};
Function.prototype.method = function(name, fn) {
this.prototype[name] = fn;
};
var Operation= function() {
...
}
Operation.method('startOperation', function() {
...
});
Operation.method('endOperation', function() {
...
});
Function.prototype.method = function(name, fn) {
this.prototype[name] = fn;
return this;
};
var Operation= function() {
...
}
Operation.method('startOperation', function() {
...
}).
method('endOperation', function() {
...
});
我们在这里,只说对该特色的应用。
使用匿名函数(闭包)保护变量,创建类的私有变量
这种保护,是建立在js的以下两点来实现的:
比如以下代码:
var baz;
(function() {
var foo = 10;
var bar = 2;
baz= function() {
return foo*bar;
}
})();
baz();
由于函数定义在闭包中,即使在闭包执行结束,baz仍能访问foo/bar这两个变量
除了可以随便在对象定以后,继续向对象中添加属性,在这里再说一下顺序问题。看下面这个代码:
function Person(name, age) {
this.name=name;
this.age=age;
}
Person.prototype= {
getName: function() {
return this.name;
},
getAge: function() {
return this.age;
}
}
var alice = new Person('Alice', 93);
var bill = new Person('Bill', 30);
Person.prototype.getGreeting = function() {
return 'Hi' + this.getName() + '!';
};
虽然我们对Person对象中函数的添加时在alice和bill实例化之后,但alice和bill仍然具有我们在之后添加的这个函数。