轉自:http://www.cnblogs.com/snandy/archive/2011/03/07/1973241.html
工具函數如下
03 |
* @param {String} className |
04 |
* @param {Function} superClass |
05 |
* @param {Function} classImp |
07 |
function $class(className, superClass, classImp){ |
08 |
if (superClass === "" ) superClass = Object; |
11 |
if ( typeof this .init == "function" ){ |
12 |
this .init.apply( this , arguments); |
16 |
var p = clazz.prototype = new superClass(); |
17 |
var _super = superClass.prototype; |
18 |
window[className] = clazz; |
19 |
classImp.apply(p, [_super]); |
定義一個Person類
01 |
$class( 'Person' , '' , function (){ |
03 |
this .init = function (name){ |
07 |
this .getName = function (){ |
10 |
this .setName = function (name){ |
建立對象看看
1 |
var p = new Person( 'Jack' ); |
3 |
console.log(p.constructor == Person); // false |
使用該工具函數寫類需注意,this.init方法必不可少。使用過Prototype庫的同學會知道Class.create後的initialize方法也是必不可少的。
因為沒考慮繼承,第二個參數superClass使用Null 字元串,即預設繼承於Object。
從輸出為false可看到,這個工具類沒有去維護constructor屬性。 設計的每一種寫類方式都是有取捨的,這完全取決於設計者的意圖。
工具函數如下
03 |
* @param {String} className |
04 |
* @param {Function} superClass |
05 |
* @param {Function} classImp |
07 |
function $class(className, superClass, classImp){ |
08 |
if (superClass === "" ) superClass = Object; |
11 |
if ( typeof this .init == "function" ){ |
12 |
this .init.apply( this , arguments); |
16 |
var p = clazz.prototype = new superClass(); |
17 |
var _super = superClass.prototype; |
18 |
window[className] = clazz; |
19 |
classImp.apply(p, [_super]); |
定義一個Person類
01 |
$class( 'Person' , '' , function (){ |
03 |
this .init = function (name){ |
07 |
this .getName = function (){ |
10 |
this .setName = function (name){ |
建立對象看看
1 |
var p = new Person( 'Jack' ); |
3 |
console.log(p.constructor == Person); // false |
使用該工具函數寫類需注意,this.init方法必不可少。使用過Prototype庫的同學會知道Class.create後的initialize方法也是必不可少的。
因為沒考慮繼承,第二個參數superClass使用Null 字元串,即預設繼承於Object。
從輸出為false可看到,這個工具類沒有去維護constructor屬性。 設計的每一種寫類方式都是有取捨的,這完全取決於設計者的意圖。