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 || {});