您的位置:首页 > Web前端 > JavaScript

javascript中的反射机制的应用

2009-11-04 11:06 337 查看
http://blog.csdn.net/leiyuanxiu/archive/2009/04/08/4056507.aspx

javascript中的反射机制的应用 收藏
在javascript中有一个方便的语法实现反射,即for(...in...)语句,其语法是for(var p in obj){}这里的p表示声明了一个变量来存储obj对象的属性和方法,有了对象,属性或者方法可以用如下方式遍历:

for(var p in obj){

if(typeof(obj[p])=="function"){

obj[p]();

}else{

alert(obj[p]);

}

}

这段语句就遍历obj对象的所有属性和方法,如果遇到属性的话就弹出它的值,遇到方法就立即执行方法。

使用反射机制来传递样式参数:

在Ajax编程中,常常会用到动态的改变界面元素的样式,可以通过对象的style属性来改变如:

//要改变背景色为红色

element.style.backgroundColor="red";

其中style对象有很多属性,基本上CSS中的所有属性都可以在JavaScript中能够使用,现在考虑如果一个函数接收参数,用以指定一个界面元素的样式,那么就需要设计参数的实现方式,显然一个或者是几个参数是不能满足要求的,下面就是一种实现:

function setStyle(styleView){

var element = getElement();

element.style=styleView;

}

这样,直接将整个style对象作为参数传递进来了,一个style对象的可能形式可能是:

var style={

color:red,

backgroundColor:green,

borderwidth:2px

}

这时可以直接调用函数:

setStyle(style);

这中方式会出现一个问题:如果element原先就有一个样式,例如增经执行过:

element.style.height="20px";

而在styleView中没有对height的定义,因此element的height样式就丢失了,不是最初想要的结果,要解决这个问题,可以用反射机制来重写setStyle函数:

function setStyle(styleView){

var element = getElement();

for(var p in styleView){

element.style[p]=style[p];

}

}

程序中遍历styleView中的每个属性将其赋值给element的style对象,这样element中原先有个而在styleView中没有定义的属性也得到了保存,达到了预期的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: