JavaScript 学习笔记 5 _对象的反射(reflection)

反射(reflectiong),这让我想起了struts2中的反射机制,对于反射的理解在学习struts2中有着很大的作用,但是这里很惭愧啊,自己还没充分弄清楚~~~

JavaScript对象的反射


在一些情况下,我们需要能够在对对象完全不了解的情况下进行处理,并且在处理它们之前发现它们的属性和方法的性质。这个发现的过程称作反射(reflection)。

需要发现一个JavaScript对象是否支持一个特定的属性或方法,我们也简单地测试如下:

if(MyObject.someProperty)
{
……
}
注:这个测试可能失败,原因是MyObject.someProperty可以为false,数字0或者特殊值null。

严格的测试如下:
if(typeof(MyObject.someProperty) != “undefined”)
{
……
}

识别属性的类型测试如下:
if(myObj instanceof MyObject) /*可以为内建类Array,Object或者通过构造函数来定义的类定义(用户定义类型)*/
{
……
}

注:使用instanceof来测试自定义类,有必要知道两个陷阱(gotcha)。首先,JSON不支持它——任何使用JSON创建的东西要么是一个JavaScript Object,要么是一个Array。其次,内建的对象确实支持存在于它们中间的继承。例如,Function和Array都是继承自Object,所以测试的顺序是相关的。例子如下:

function testType(myObj)
{
if(myObj instanceof Object)
{
alert(“it’s an objecet”);
}
else if(myObj instanceof Array)
{
alert(“it’s an array”);
}
}
testType([1,2,3,4]);

想想该是输出哪个结果,[1,2,3,4]是一个Array,但是不要奇怪,输出的是Object,判断换一下呢,恩,是的,输出的就是array了。

好了,接下来我们做得全面点,无遗漏得去发现一个对象的所有属性和函数:
function MyObject()
{
this.color = ‘red’;
this.flavor = ‘strawberry’;
this.azimuth = ’45 degrees’;
this.favoriteDog = ‘collie’;
}
var myObj = new MyObject();
var debug = “discovering…\n”;
for(var i in myObj) /*这个i取到的是myObj的属性名!如果需要取得属性名对应的值可以使用for each(var I in myObj),关于for的用法可以去网上搜下*/
{
debug += i + “ -> “ + myObj[i] + “\n” ;
}

alert(debug);

说明:这个循环将会执行四次,返回所有设置在构造函数中的值。


好了接下去我们需要学习面向对象的另一个特征:虚类或者接口。那么等下见~~codd饿了~~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值