js 的部分设计思维很先进,原型继承和类继承分别体现了真实世界里的两种事物继承关系。不知道有没有哪种程序语言同时有这两种特性的?
class-based OO 的方法论是从忽悠做起: 先给对象关系建模, 全部设计好后再写代码, 对象的关系由类型的关系决定, 由于关系往往是静态的运行时不可变的, 可以用 "继承" 这个词表达重用的意图.
prototype-based OO 不讲继承, 因为对象的原型可以换掉和修改, 和"继承"这个隐喻区别很大, 用"继承"去理解就是误解... prototype 的方法论是不忽悠直接开始码代码: 先写一部分的行为, 有必要重用时再考虑把它变成 prototype. 对象关系不和类型挂钩, 运行时可变.
从能力上看, prototype 可以模拟 class, class 很难模拟 prototype.
#15 楼 @rainchen 私有变量? http://w2ui.com/web/blog/1/A-Variation-of-JavaScript-Module-Pattern
// 3. Augmentation of the module
var module = (function (mod) {
// private variables and functions
var private = 1;
// body of the module
mod.doSomething = function doSomething() {
// You can put any JavaScript code here
}
// return public part
return mod;
})(module || {});