YUI, JavaScript 构造函数的再次思考

继续默念一次,函数就是对象

 

在前面一文中,我写了YUI的一个属性设置的例程

在例程中,有这句话this.addAttrs(attris);,这一句位于Connector函数中,这让我在思考一个问题,不知道理解是否准确:

“函数是对象,对函数的调用就是调用函数的构造子!”  

函数的定义是函数对象的类对象,函数的构造子就是函数的调用,构造出的(实例化的)函数对象将引发一个过程的执行

 

例子:

//定义一个函数对象
function test(){
      alert("test")
}
//函数实例化,调用构造子test()
test(); //test()引发 test (as function)的创建,函数被创建后的直接结果就是“线程的运行”;
 


于是我有了一个新的想法,简化函数构造子调用,  前一篇YUI的例程我们用(function structrue()()) 作为构造子,下面我们简化他

按照前面的思路:

 

//定义obj,由于javascript没有类字节码加载然后生成类对象的过程,
//所以我们直接写出来的函数定义就是类对象了
function obj(namexxx){
   	
	this.structrue = function(_name){  //定义一个structrue函数
		this.name = _name;
	};
	this.name = "";
	
	this.structrue(namexxx);  //让structrue函数的真构造充当obj的伪构造
}

var obj1 = new obj("2222");
alert(obj1.name);   //alert("2222");


 


 

 

ok!! 前面YUI属性的例子程序也可改下了:

 

        YUI().use('event-custom', 'attribute', 'node', function(Y) { //应用attribute模块
		function Connector(url) {

			this.structure = function(_url){
				Y.augment(Connector, Y.EventTarget); 
				Y.augment(Connector, Y.Attribute); //属性设置
				this.publish("evnet:testEvent");
				this.addAttrs(attris);  //给Connectort添加属性
				this.set("url",_url);
			}
			this.structure(url);


			// 属性配置信息,此处配置了url 、data两个属性
			var attris = {
				url : {
					value : ""  //单属性值
				},
				data : {
					value : {} //对象属性
				}
			};
			
			
			this.accept = function() {    //set属性
				this.set("data",{     
									protocolx:"http",
									portx:"8080",
									aptDatax:"123456"
								}
						);
				
				this.fire("event:testEvent", {
					target : this
				}); //发布事件
			};
			
			
			
			
			
		}

		var p = new Connector("http://xxxx"); //实例化
		p.on("event:testEvent", function(e) { //监听事件
			var obj = e.target.get("data");
			//get出属性
			alert(e.target.get("data").protocolx+","+obj.aptDatax+","+e.target.get("url")); 
		});

		p.accept(); //调用方法,触发事件
		
		
		p.set("url","再玩一下!")
		alert(p.get("url"));
		

	});


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值