javascript 寫類方式之十
2024-05-06 14:14:58
供稿:網友
 
10、mootools.js的寫類方式 
mootools.js的最新版本是1.2.3,這里使用的是1.2.0。mootool被設計成非常緊湊的,模塊化的,面向對象的的js庫。mootool中寫類用Class類。Class類由Native類new出來的: 
 代碼如下:
/* 
*Script: Class.js 
*/ 
var Class = new Native({ 
name: 'Class', 
initialize: function(properties){ 
properties = properties || {}; 
var klass = function(empty){ 
for (var key in this) this[key] = $unlink(this[key]); 
for (var mutator in Class.Mutators){ 
if (!this[mutator]) continue; 
Class.Mutators[mutator](this, this[mutator]); 
delete this[mutator]; 
} 
this.constructor = klass; 
if (empty === $empty) return this; 
var self = (this.initialize) ? this.initialize.apply(this, arguments) : this; 
if (this.options && this.options.initialize) this.options.initialize.call(this); 
return self; 
}; 
$extend(klass, this); 
klass.constructor = Class; 
klass.prototype = properties; 
return klass; 
} 
});
Native方法是mootools中一個非常重要的方法,很多類都用它去組裝。如Window,Document,Event。當然還有這里的Class,導入mootools后我們寫類時只需要用Class就行了。一個Person類: 
 代碼如下:
/** 
* Person類 
* @param {Object} name 
*/ 
var Person = new Class({ 
initialize: function(name){ 
this.name = name; 
}, 
setName : function(name) { 
this.name = name; 
}, 
getName : function() { 
return this.name; 
} 
}) 
//new一個對象 
var p = new Person("jack"); 
//測試set,get方法 
console.log(p.getName());//jac 
p.setName('andy'); 
console.log(p.getName());//andy 
//測試instanceof及p.constructor是否正確指向了Person 
console.log(p instanceof Person); //true 
console.log(p.constructor == Person); //true 
Native實際上只是一個普通函數,它通過所傳參數組裝了一個類(function),最后返回該類(function)。既然Native是函數,函數調用的方式是(),call,apply。但在mootools中卻用new Native(obj)方式。為何?原因只是使Native看起來更像一個類而已。