`
qiqicode
  • 浏览: 7665 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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饿了~~~
分享到:
评论

相关推荐

    整理后java开发全套达内学习笔记(含练习)

    Reflection [java] 反射 [ri'flekʃәn] script n.手写体,小型程序 [skript] serialized vt.序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit...

    JAVA私塾全套笔记

    #### 反射机制(Reflection) - **反射** - 动态地获取类的信息并操作其对象。 #### 事务 - **事务管理** - ACID属性(原子性、一致性、隔离性、持久性)。 #### JEE—JAVA Enterprise Edition - **JEE概述** ...

    ES6-learning:学习ES6的笔记

    思维导图第一章块级绑定第二章弦和正则表达式第三章函数第四章扩展的对象功能第五章解构:更方便的数据访问第六章符号和符号属性第七章与地图第八章迭代器(Iterator)和生成器(Generator)第九章JavaScript中的类...

    中美 IT 培训 C# Asp.net 全套笔记1

    学习反射(Reflection)、属性(Attribute)的相关概念和使用。学习流(stream)的概念和IO操作、文件的读写和传输。 掌握多线程编程、文件的操作和程序集的相关概念,学习反射和属性。 第二阶段教学内容安排(400...

    中美 IT 培训 C# Asp.net 笔记2

    学习反射(Reflection)、属性(Attribute)的相关概念和使用。学习流(stream)的概念和IO操作、文件的读写和传输。 掌握多线程编程、文件的操作和程序集的相关概念,学习反射和属性。 第二阶段教学内容安排(400...

    中美 IT 培训 C# Asp.net 笔记3

    学习反射(Reflection)、属性(Attribute)的相关概念和使用。学习流(stream)的概念和IO操作、文件的读写和传输。 掌握多线程编程、文件的操作和程序集的相关概念,学习反射和属性。 第二阶段教学内容安排(400...

    值类型与引用类型理论内容.part01.rar

    ASP.NET培训资料(笔记版)(AJAX,C#,JavaScript,SQL) 详细的资料 三个月的课程录像+资料笔记(花了一万六千块的培训资料超值【19G的经典内容】 认真学习后包你能成为优秀的.net程序员 <br>(注明:不是...

    值类型与引用类型理论内容.part05.rar

    C#,JavaScript,SQL) <br>我将不定期发布,直至所有课程完毕 <br>详细的资料 三个月的课程录像+资料笔记(花了一万六千块的培训资料超值【19G的经典内容】 认真学习后包你能成为优秀的.net程序员 ...

    CSS3网页玻璃文字动画特效.zip

    在CSS3中,实现玻璃文字特效的关键在于对阴影(box-shadow)、透明度(opacity)、渐变(gradient)以及反射(reflection)等属性的巧妙运用。首先,通过box-shadow设置内外阴影,模拟出立体感;然后,调整透明度,...

    oop-with-java.notes:Java面向对象编程简介

    15. **反射(Reflection)**: - 反射允许程序在运行时检查类的信息(如方法、字段)并动态调用它们,增加了程序的灵活性。 16. **注解(Annotation)**: - 注解是元数据的一种形式,提供了一种向编译器或JVM...

Global site tag (gtag.js) - Google Analytics