理解 this.initialize.apply ( this, arguments )

一、代码片段:


1、Class定义如下

var Class = {
	create: function() {
		return function() { 
		this.initialize.apply(this, arguments); }
	}
}




2、Class使用方式:

var SimpleDrag = Class.create();
SimpleDrag.prototype = {
  initialize: function(drag) {
  },
  Start: function(oEvent) {
	
  },
  Move: function(oEvent) {
  },
  Stop: function() {
  }
};


二、分析

1、Class定义的另一种写法可以为:

var Class = { 
    create: function() { 
        return this.initialize.apply(this , arguments); 
    } 
} 
或者不适用apply方法

var Class = { 
    create: function() { 
        return this.initialize(arguments[0], arguments[1].....); 
    } 
} 


2、create方法的作用:

         Class对象的create方法返回的是对象的构造函数,即create方法的作用就是进行对象实例的初始化。

3、initialize方法的作用:

         这里的构造函数就是initialize函数,而实际上这里的initialize函数只是声明,并没有实际的定义。 这里的Create声明实际上是将initialize方法封装了一下,更加的明确功能。initialize函数的定义是在原型(prototype)中进行的。当使用Class对象的create方法定义新对象实例时,就会执行initialize方法,即执行已经声明好的构造函数。initialize只是你所声明的构造函数的名字,如果你有兴趣,你可以将任何名字定义为构造函数,当使用create方法创建新对象实例时,就会执行你所声明构造函数。

3、apply方法的作用:

         call和apply看做是某个对象的方法,目的是通过间接方式进行调用函数。call和apply的第一个实参是要调用函数的母对象,call方法是将所有参数罗列出来,而apply是将所有参数放在一个数组中。所以使用apply方法比较利于传递参数。



你可能感兴趣的:(JavaScript)