最高半折刷qq各种业务和钻(家里人自己开的,尽管放心,大家多捧捧场)

sking7

导航

使用定义Prototype的对象或函数

我们要给一个对象(var和函数)定义原始对象时,有两种定义方法

var a=function(){

   getName:function(){}

}

a.prototype=function(){

  getName:function(){}

}

function b(){}

b.prototype=funtion(){}

这两种写法在调用原始对象方法时有所不同。

第一种:a.prototype.getName();

第二种:new b().getName();

当然我们不想经常new一个对象出来,但也不想每次都带着prototype调用。

怎么办呢?

看下面的例子,就是返回prototype对象。。

var DomLoader=function(window){

	var DomLoader=function (){};
	DomLoader.prototype={
		createNode:function(){
		alert(1);
		this.getName();
		},
		getName:function(){
			alert(arguments.callee.caller==this.createNode);//true
		}
	};
	return DomLoader.prototype;
}();
DomLoader.createNode();

在博客上见另外一种实现方法

(function(){
var DomLoader=(function(){ 
//这里的DomLoader毫无意义,因为这里DomLoader在外面是访问不到的(所以下面提供了一个简洁的实现方法) 
//注意这里的init还没有定义,这里函数没有调用,所以不会报错,如果在下面调用:DomLoader();,
//程序就会报错,因为函数未定义。。
var DomLoader=function (){return new DomLoader.prototype.init();};
 //这正是实现了不用ne的关键。。所以,调用DomLoader(),后返回的是个函数new化的对象。上面第二种的调用方式

	DomLoader.prototype={
		createNode:function(){
		alert(1);
		this.getName();
		},
		getName:function(){
			alert(arguments.callee.caller==this.createNode);
		},
		init:function(){}
	};
	DomLoader.prototype.init.prototype = DomLoader.prototype;
//让init的原型对象指向DomLoader的原型对象然后返回
return window.DomLoader =DomLoader;//这里是传值给window的属性 //alert(DomLoader); //alert( DomLoader.prototype.init); //return DomLoader.prototype; })(); })(window); alert(DomLoader);//打印出来的其实是init函数 DomLoader().createNode();//这里一定要加(),才能执行init函数,返回对象。使用prototype对象方法

其实就是吧DomLoader编程了init函数对象,返回后就可直接调用,不用new。

注意上面代码标红的部分

简洁的实现方法:

var DomLoader=(function(){
	var DomLoader=function (){return  new DomLoader.prototype.init();};
	DomLoader.prototype={
		createNode:function(){
		alert(1);
		this.getName();
		},
		getName:function(){
			alert(arguments.callee.caller==this.createNode);
		},
		init:function(){}
	};
	DomLoader.prototype.init.prototype = DomLoader.prototype;
	return DomLoader;
	//alert(DomLoader);
	//alert( DomLoader.prototype.init);
	//return DomLoader.prototype;
})();
alert(DomLoader);
DomLoader().createNode();

不使用window对象


posted on 2011-10-16 19:41  G.N&K  阅读(790)  评论(0编辑  收藏  举报