續上篇,
建構函式+原型 組裝一個類;同一建構函式可以定義出多個類型
view sourceprint?01 /**
02 * $class 寫類工具函數之二
03 * @param {Function} constructor
04 * @param {Object} prototype
05 */
06 function $class(constructor,prototype) {
07 var c = constructor || function(){};
08 var p = prototype || {};
09 return function() {
10 for(var atr in p) {
11 arguments.callee.prototype[atr] = p[atr];
12 }
13 c.apply(this,arguments);
14 }
15 }
與上一篇方式類似,仍然用建構函式,原型對象,定義兩個類。
view sourceprint?01 //建構函式
02 function Person(name) {
03 this.name = name;
04 }
05 //原型對象
06 var proto = {
07 getName : function(){return this.name},
08 setName : function(name){this.name = name;}
09 }
10 //寫兩個類
11 var Man = $class(Person,proto);
12 var Woman = $class(Person,proto);
與上一篇不同的是,雖然Man和Woman都是用Person,proto組裝的。但Man卻不等於Woman。即同一個建構函式(Person)定義不同的類。
view sourceprint?1 // 同一個建構函式(Person)定義不同的類
2 console.log(Man == Woman); //false