MooTools教程(告诉你为什么学Mootools)(2)

http://www.itjxue.com  2015-08-06 23:10  来源:未知  点击次数: 



在来看一下moo类机制的一些核心代码.

 

 

Java代码

 

  1. var Class = function(properties){   
  2.     var klass = function(){   
  3.         return (arguments[0] !== null && this.initialize && $type(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this;   
  4.     };   
  5.     $extend(klass, this);   
  6.     klass.prototype = properties;   
  7.     klass.constructor = Class;   
  8.     return klass;   
  9. };   
  10.   
  11. Class.prototype = {   
  12.     extend: function(properties){   
  13.         var proto = new this(null);   
  14.         for (var property in properties){   
  15.             var pp = proto[property];   
  16.             proto[property] = Class.Merge(pp, properties[property]);   
  17.         }   
  18.         return new Class(proto);   
  19.     },   
  20.     implement: function(){   
  21.         for (var i = 0, l = arguments.length; i < l; i++) $extend(this.prototype, arguments[i]);   
  22.     }   
  23.   
  24. };  

 

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代码

 

  1. Object.extend = function(destination, source) {   
  2.   for (var property in source) {   
  3.     destination[property] = source[property];   
  4.   }   
  5.   return destination;   
  6. }  

 

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代码

 

  1.   
  2. var $extend = function(){   
  3.     var args = arguments;   
  4.     if (!args[1]) args = [this, args[0]];   
  5.     for (var property in args[1]) args[0][property] = args[1][property];   
  6.     return args[0];   
  7. };   
  8. 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代码

 

  1. var myObjcet={....};   
  2. myObjcet.extend=$extend;   
  3. myObjcet.extend(objA);   
  4. myObjcet.extend(objB);   
  5. myObjcet.extend(objC);  

 

var myObjcet={....};
myObjcet.extend=$extend;
myObjcet.extend(objA);
myObjcet.extend(objB);
myObjcet.extend(objC);

简单的一句话,让extend的用法增加了更多的灵活性,不得不赞一个了!!!

(责任编辑:IT教学网)

更多

推荐Javascript/Ajax文章