最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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的反射问题
/* 两个等号直接比较值,但是类型不能相互转换的时候报错
window[i] === "wsenmin1"
window[i] == "wsenmin1"
大家相互比较一下
-
上一个: WebUploader文件上传组件示例
-
下一个: twig语法 asset 绝对路径设置
相关文章
- js实现音乐播放器代码展示 10-12
- js实现图片查看器代码展示 10-12
- JS中switch的四种写法介绍 10-12
- js实现新闻轮播效果教程 10-11
- JS实现简单的图片切换功能教程 10-11
- js实现下拉刷新和上拉加载解析 09-28