JavaScript反射机制到底是什么?
JavaScript的 反射机制,根据百度的结果, JavaScript反射结果不太一样,究竟怎么样算是反射呢?
有人说,动态语言(php,javascript)这类语言无所谓反射不反射。
有实例最好了, 谢谢大家
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
JavaScript的 反射机制,根据百度的结果, JavaScript反射结果不太一样,究竟怎么样算是反射呢?
有人说,动态语言(php,javascript)这类语言无所谓反射不反射。
有实例最好了, 谢谢大家
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
不要为了为了反射而反射。
题主可能是为了反射而反射。(js的反射随处可见,而且你自己可能经常用)
反射的概念比较强的语言像java和go。因为他们都是静态语言。缺乏很多动态特性。他们是只有通过一大堆api才能反射。所以才会有比较强反射的概念。
js是一个基于原型继承的面向对象的函数语言。反射无处不在。(当一个概念无处不在的时候,那么设个概念也就渐渐地淡化了。)
js反射说个最简单的例子。
在你不知道一个对象内部结构的情况下(你甚至连这个对象的一个属性,或api都不知道),怎么跟他通信呢?这个时候就要通过一种机制,得到它的内部结构。这种机制就叫做反射。说白了,窥探对象内部结构的方法就叫做反射。
例子1:
可能你会问?这比较时遍历window对象啊?有什么稀奇的。你仔细看看这就是在窥探 window 对象的内部结构;换句话说这就是反射。(window的方法和属性都基本都会被打印出来,除了一些情况enumerable:true的时候)。
得到了内部结构就需要调用,也就是通信。
js是一个表现能力很强的语言,也就是说代码会很好读。而写可以用少的代码做多的事。这些年google在v8上花费很多精力,性能也越来越强。但是js也有很多毛病。这里就不说了。
JavaScript哪有什么反射……
换个说法……
JavaScript什么地方都是反射。
window['alert']()这放到JAVA/C#那类语言中妥妥的都是反射……
http://www.nowamagic.net/javascript/js_ReflectionInJavascript.php
还有那种语言比javascript这种基于对象的语言更容易反射么……
以下文字来源于维基百科:
我在最近的项目中找了找,还真没找到反射的例子。然后我仔细读了两遍问题,我估计题主可能也不是真的需要用反射来解决问题……
个人认为反射在javascripts不太贴切,他无法像java等语言一样使用方便和全面使用,可以使用for in + call/apply的方式,如链接: http://segmentfault.com/a/1190000000593171
如果你使用过java反射再尝试js for in的反射,你会发现有些反射还是木那么方便做的。
实际情况中很少会在js中想用反射,因为感觉木必要
个人认为反射就是在不知道对象的出处时,在运行时可以获取到该对象的属性或者方法
反射机制最通俗的理解应该是, 字符串可以当做代码来运行, 这个确保了你可以通过动态的拼装字符串产生更多行为的可执行代码。
例如这个里面 循环拼装了多个字符串并且作为可执行代码执行:
而事实上在java中反射机制没这么方便, 需要一步一步 通过完整类名(带包名)字符串映射类, 然后提供方法实例化,让后通过获取方法的方法传入方法名字符串获取方法,执行方法等一系列API。 但是共同点就是,有这些字符串就能在不需要程序员自行书写代码情况下执行想要的代码。
反射的核心价值: 让代码帮你写代码。