一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

JS 反射捷径分析详解

时间:2016-08-24 编辑:简简单单 来源:一聚教程网


在许多编程语言中反射都属于高级特性,按 Wiki 的定义,严格意义上的反射指的是运行时检查并修改自身程序结构的能力。
同一篇 Wiki 上给出了许多语言实现反射的例子。这些示例代码简单而言实现的都是这样的机制:根据输入的字符串,查找和这个字符串名相匹配的函数或方法来执行。这种机制很强大,能够将代码更优雅地与输入数据匹配起来。不过在提及 ECMAScript 的时候,Wiki 上的例子是这样的:


// Without reflection
new Foo().hello()

// With reflection

// assuming that Foo resides in this
new this['Foo']()['hello']()

// or without assumption
new (eval('Foo'))()['hello']()

// or simply
eval('new Foo().hello()')

用 eval 来执行字符串对应的方法名,虽然原理上没有问题,但显然不是一个实践中好用的方案,更不要说令人困惑的 new 了。如果只是想通过 'hello' 这个字符串执行 Foo.hello() 方法,其实可以非常容易地实现:


var Foo = {
    hello: function() { /*...*/ }
    world: function() { /*...*/ }
};

这样一来调用函数就和访问一个对象的属性一样容易了。


var bar = 'hello';
Foo[bar](); // Foo.hello()

这个模式简单到不像模式,但它却有许多实际的用处。比如,当输入数据可以分为几种特定种类,且每个种类需要执行不同的函数操作时,可以构建一个 Foo 这样的 Dispatch Table 对象,直接用数据的字符串查表执行对应的函数,语法上十分简洁。


JS的反射问题

 


JS反射




/* 两个等号直接比较值,但是类型不能相互转换的时候报错
window[i] === "wsenmin1"
window[i] == "wsenmin1"
大家相互比较一下

热门栏目