Posted in Javascript onJuly 05, 2009
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看起来更像一个类而已。
javascript 写类方式之十
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@