MooTools教程(告诉你为什么学Mootools)(2)
http://www.itjxue.com 2015-08-06 23:10 来源:未知 点击次数:
在来看一下moo类机制的一些核心代码.
Java代码
- var Class = function(properties){
- var klass = function(){
- return (arguments[0] !== null && this.initialize && $type(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this;
- };
- $extend(klass, this);
- klass.prototype = properties;
- klass.constructor = Class;
- return klass;
- };
- Class.prototype = {
- extend: function(properties){
- var proto = new this(null);
- for (var property in properties){
- var pp = proto[property];
- proto[property] = Class.Merge(pp, properties[property]);
- }
- return new Class(proto);
- },
- implement: function(){
- for (var i = 0, l = arguments.length; i < l; i++) $extend(this.prototype, arguments[i]);
- }
- };
var Class = function(properties){ var klass = function(){ return (arguments[0] !== null && this.initialize && $type(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this; }; $extend(klass, this); klass.prototype = properties; klass.constructor = Class; return klass; }; Class.prototype = { extend: function(properties){ var proto = new this(null); for (var property in properties){ var pp = proto[property]; proto[property] = Class.Merge(pp, properties[property]); } return new Class(proto); }, implement: function(){ for (var i = 0, l = arguments.length; i < l; i++) $extend(this.prototype, arguments[i]); } };
代码的具体原理就不细说了.大家在moo的Class里看到了 extend 和implement,那下面就来具体说一说moo和prototype的 继承机制吧.
===========================================
二. 继承机制
===========================================
Prototype
prototype提供的继承很简单.
Java代码
- Object.extend = function(destination, source) {
- for (var property in source) {
- destination[property] = source[property];
- }
- return destination;
- }
Object.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; }
他只是把source里的属性赋给destination,同时会覆盖destination里的同名属性.
他可以用于对象,也可以用于类,当要实现类的继承时,destination要使用 MySubClass.prototype.
prototype的继承机制可以说是非常薄弱的.
Mootools
moo提供了三种继承机制:
首先他也提供了简单的继承机制:
Objcet.extend (注意,不是上面代码中 Class 里的 extend)
他的代码如下
Java代码
- var $extend = function(){
- var args = arguments;
- if (!args[1]) args = [this, args[0]];
- for (var property in args[1]) args[0][property] = args[1][property];
- return args[0];
- };
- Object.extend = $extend;
var $extend = function(){ var args = arguments; if (!args[1]) args = [this, args[0]]; for (var property in args[1]) args[0][property] = args[1][property]; return args[0]; }; Object.extend = $extend;
他的使用方法和 prototype 完全一样.
但是大家可能注意到了 这句 if (!args[1]) args = [this, args[0]]; 这句的纯在使得下面的代码写法成为可能.
Java代码
- var myObjcet={....};
- myObjcet.extend=$extend;
- myObjcet.extend(objA);
- myObjcet.extend(objB);
- myObjcet.extend(objC);
var myObjcet={....}; myObjcet.extend=$extend; myObjcet.extend(objA); myObjcet.extend(objB); myObjcet.extend(objC);
简单的一句话,让extend的用法增加了更多的灵活性,不得不赞一个了!!!
(责任编辑:IT教学网)
下一篇:JS教程:鼠标悬停文字上显示图片