`
flyingis
  • 浏览: 296641 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript 对象的反射及应用

阅读更多
    Java和.NET都有着比较完善的反射机制,用来处理未知的对象并获取它们的属性和方法。JavaScript虽然没有完善的反射体系,但在编程的时候还是可以通过代码设计来实现类似反射的基本功能。

    检测一个JavaScript对象是否支持某种特定的属性或方法:

if (typeof(obj.property) != "undefined") {}


    这样声明比直接使用"if (obj.property)"来描述要更准确,因为当obj.property的值为false、0、null的时候,虽然该属性存在,但返回的结果却恰恰相反。

    如果要求检测更详细一些,查看该属性的具体类型,可以用instanceof操作符:

if (obj instanceof PredefinedObj) {}


    但是,当对obj对象进行条件检测的时候,如果多种条件的对象类型存在继承关系,则需要注意代码的书写顺序,例如:

function() ExamineType(obj) {
  if (obj instanceof Object) {
    alert("An Object");
  else if (obj instanceof Array) {
    alert("An Array");
  }
  }
}


    上述代码执行的结果会认为原为Array类型的obj是一个Object,因为Array本身就是从Object继承而来,显然,将对Array的检测放在前面会得到更精确的结果。因此,使用instanceof来判断对象类型,需要注意当两个对象存在继承关系的时候,应该关注检测顺序的问题,进一步我们可以想到,JSON创建的对象不是Object就是Array,使用instanceof来检测JSON对象意义不大。

    利用JavaScript的反射,我们可以编写一个函数来检查对象是否有一个特定名称的函数,然后利用该函数进行计算,以此在JavaScript中实现接口的功能,为在Ajax中使用设计模式奠定基础。

//this.getWeight和this["getWeight"]意义相同
//判断对象是否存在指定名称的函数
Object.prototype.hasFunc = function(func) {
  return this && this[func] && this[func] instanceof Function;
}

function hasWeight(obj) {
  return obj.hasFunc("getWeight");
}

//判断参数是否为数值类型
function isNum(param) {
  return parseFloat(param) != NaN;
}

//计算两个对象的重量
function calWeight(obj1, obj2) {
  var total = null;
  if (hasWeight(obj1) && hasWeight(obj2)) {
    var w1 = obj1.getWeight();
    var w2 = obj2.getWeight();
    if (isNum(w1) && isNum(w2)) {
      total = parseFloat(w1) + parseFloat(w2);
    }
  }
  return total;
}


    calWeight先判断两个对象是否均存在getWeight()函数,然后检查getWeight()计算结果是否为数值类型,最后进行数值相加返回计算结果。需要注意的是,parseFloat(param)函数能够除去param中非数字部分,如果param=16pm,parseFloat (16pm)得到的结果是16。如果不使用parseFloat(param)函数对getWeight()计算结果进行检验,那么会带来安全性的问题,这种情况下可以将对象的getWeight()设计为返回字符串或其他类型,在调用它之前我们是不知道JavaScript函数的返回类型的,因为 JavaScript函数没有预先定义的类型。

    BlogJava上的链接:http://www.blogjava.net/flyingis/archive/2006/09/12/69213.html
分享到:
评论

相关推荐

    JavaScript对象反射用法实例

    JavaScript对象反射是一种机制,允许程序在运行时检查、修改和操作对象的属性。在JavaScript中,反射通常指的是通过Reflect API提供的方法来访问或修改对象的行为。本文将通过实例分析来探讨JavaScript对象反射的...

    frida反射调用对象中的方法与字段.pdf

    Frida通过JavaScript脚本来实现对目标应用的动态调用。当需要使用反射调用某个对象的方法或访问其字段时,可以通过Frida的`Java.use`方法获取到对应的类的代理对象,然后通过调用其方法来实现。例如,在Frida脚本中...

    JavaScript获取自身对象

    总的来说,这篇博客可能涵盖了从基础的JavaScript对象操作到高级的反射和元编程概念,为开发者提供了一个全面了解如何在JavaScript中获取和操作对象的指南。通过学习这些内容,开发者能够编写出更加高效、灵活和可...

    应用java反射机制打印一个对象.docx

    Java 反射机制在对象打印中的应用 Java 反射机制是 Java 语言中的一种强大工具,允许程序在运行时检查和修改对象的行为。下面我们将讨论如何使用 Java 反射机制来打印一个对象的所有属性值。 Java 反射机制的概念 ...

    javascript Prototype 对象扩展.docx

    通过本文的学习,我们深入了解了如何使用`prototype`来优化对象方法的存储,并学习了对象扩展和反射的基本原理及实际应用场景。这些技术不仅有助于提高代码的可维护性和性能,还能帮助我们在处理复杂数据结构时更加...

    利用反射实现对象转json格式字符串

    本文将深入探讨如何使用反射技术将对象转换为JSON格式的字符串。我们将以一个名为`JsonUtils`的Java类为例,该类可能包含实现此功能的方法。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的...

    基于反射机制实现Java对象向Json数据的转换.pdf

    JSON的特性使其成为理想的数据交换语言,广泛应用于各种JavaScript RIA(富客户端)框架及技术。 二、JSON的结构 JSON的结构非常简单,所有的JSON数据都基于以下三条规则: 1. 对象是一个无序的“名称/值”对集合...

    原创asp.net反射超强实现, js反射

    然而,JavaScript中的一些高级特性,如ES6的Reflect对象和Proxy,提供了更接近反射的能力,如操作元数据和拦截操作。 以下是一个JavaScript反射的简单例子: ```javascript function MyClass() {} MyClass....

    “Javascript Web开发与应用”课程网络教学研究与探索.pdf

    Javascript使用一些智能的语法和语义来仿真高度复杂的行为,其对象模型极为灵活、开放和强大,具有全部的反射性。 三、课程设计思路 为了提高教学效率和效果,本课程设计了基于网络的教学模式。通过使用昆明...

    Object-Oriented JavaScript

    #### 知识点一:面向对象编程在JavaScript中的应用 - **定义**:面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计围绕“对象”进行组织。在JavaScript中,虽然它本身是一种基于原型...

    net的反射和js的反射全部实例

    而在JavaScript中,反射可能用于动态创建和操作对象,或者在运行时检查和修改代码行为,如模块加载、依赖注入等。 总结: 反射为程序员提供了在运行时探索和操纵程序的能力,增强了代码的灵活性。尽管.NET和...

    JavaScript反射与依赖注入实例详解

    在JavaScript中,反射允许我们在运行时检查对象的属性、方法、构造函数等信息,甚至可以动态地调用方法或修改对象的状态。例如,通过`Object.getOwnPropertyDescriptor`和`Object.keys`等内置函数,我们可以获取对象...

    dwr与反射相结合案例

    Direct Web Remoting (DWR) 是一个开源Java库,它允许JavaScript在Web浏览器中与服务器端的Java对象进行交互,从而实现动态、实时的Web应用。在这个“dwr与反射相结合”的案例中,我们将深入探讨如何利用DWR的灵活性...

    《JavaScript程序设计》课程教学大纲

    通过其灵活的对象模型和反射性,JavaScript能够创建高度交互式的网页应用。 三、课程核心内容与目标 课程内容涵盖了Web技术概述、HTML/XHTML基础、CSS技术、JavaScript编程基础、流程控制、函数、对象编程、浏览器...

    AJAX JavaScript反射机制的介绍

    总结来说,JavaScript的反射机制通过`for...in`循环提供了在运行时动态访问和修改对象属性的能力。这对于实现动态行为,特别是AJAX应用中的界面交互和样式管理,具有很大的价值。通过熟练掌握这一机制,开发者可以...

    GWT反射

    GWT是一个开源框架,它允许开发者使用Java语言编写客户端Web应用,然后编译成高效的JavaScript代码运行在浏览器上。 【描述】:尽管GWT在编译时会进行优化,使得在JavaScript端执行的代码尽可能高效,但其原生不...

    Javascript高级应用与实践

    ### JavaScript高级应用与实践知识点概览 #### 一、JavaScript性能优化 1. **减少DOM操作**:直接操作DOM是比较耗时的操作之一。为了提高性能,可以尽量减少直接对DOM的操作次数,例如通过缓存DOM元素引用的方式...

    JavaScript王者归来part.1 总数2

     7.2.3 反射机制--枚举对象属性   7.3 对象的构造   7.3.1 构造函数--一个双精度浮点数封装类的例子   7.3.2 缺省构造和拷贝构造   7.3.3 对象常量   7.4 对象的销毁和存储单元的回收   7.5 JavaScript...

    javaScript和java参考手册

    Java手册则涵盖了Java语言的基础知识,包括语法、数据类型、流程控制、异常处理、类与对象、包、接口、多线程、输入/输出流、集合框架、反射、注解等。Java的面向对象特性非常突出,它支持类的封装、继承和多态。...

Global site tag (gtag.js) - Google Analytics