CNode

node.js如何实现类似java中的反射机制?不用eval

Sshinka发布于14 年前最后回复12 年前26 回复15391 浏览0 收藏

RT 求解

查看回复

回复 (25)

C
chinawomen#1·14 年前

为啥不用eval?

S
shinka#2·14 年前
引用 chinawomen为啥不用eval?

因为不够好 具体原因网上有不少的

L
leizongmin#3·14 年前

java中的反射是神马样的?

A
arrowing#4·14 年前

像是PHP中的 $p = 'ppppp'; $thisp = 'p'; $$thisp ??

C
chinawomen#5·14 年前
引用 chinawomen为啥不用eval?

@shinka 不好也得用。木有别的办法

C
cony138#6·14 年前

可否把具体需求说一下啊,反射机制听得很空啊,而且cnodejs club中用java的人也不是全部吧

1
151263#7·14 年前

javascript本来就是动态语言,根本不需要反射 比如,java中动态获得的某对象的某属性需要用反射 但是,javascript中,只需要一个中括号 var obj = {a:"b"}; alert(obj["a"]);

R
roychad7#9·12 年前
引用 arrowing像是PHP中的 $p = 'ppppp'; $thisp = 'p'; $$thisp ??

@shinka 他说的是php中的字符串变量,跟php的反射表面上没有关系。

Y
youxiachai#10·12 年前

12 年的帖子.... 话说,动态语言也没有反射这个概念吧..

D
dlutwuwei#11·12 年前

反射什么啊?需要什么require一下就可以啊

S
shinka#12·14 年前

反射方法名

S
shinka#13·14 年前
引用 151263javascript本来就是动态语言,根本不需要反射 比如,java中动态获得的某对象的某属性需要用反射 但是,javascript中,只需要一个中括号 var obj = {a:"b"}; ...

嗯 这个我知道 我是想问下 比如var funcName = "getItems"; getItems是一个Function名称,怎样不用eval去执行getItems()这个函数

S
shinka#14·14 年前
引用 arrowing像是PHP中的 $p = 'ppppp'; $thisp = 'p'; $$thisp ??

也许就是你说的意思吧 在下不懂php

S
shinka#15·14 年前
引用 cony138可否把具体需求说一下啊,反射机制听得很空啊,而且cnodejs club中用java的人也不是全部吧

比如var funcName = "getItems"; getItems是一个Function名称,怎样不用eval去执行getItems()这个函数

S
shinka#16·14 年前
引用 leizongminjava中的反射是神马样的?

比如var funcName = "getItems"; getItems是一个Function名称,怎样不用eval去执行getItems()这个函数

L
leizongmin#17·14 年前
引用 leizongminjava中的反射是神马样的?

@shinka 楼下(#6楼)已经说了,大多数情况都可以 。 另外,我不解为什么不能用 eval

1
151263#18·14 年前
引用 151263javascript本来就是动态语言,根本不需要反射 比如,java中动态获得的某对象的某属性需要用反射 但是,javascript中,只需要一个中括号 var obj = {a:"b"}; ...

@shinka 给你举个例子, var obj = { getItems: function(str) { alert(str); } }; var funcName = "getItems"; objfuncName; //获得了属性之后,()表示执行这个属性

C
cony138#19·14 年前
引用 cony138可否把具体需求说一下啊,反射机制听得很空啊,而且cnodejs club中用java的人也不是全部吧

@shinka 其实各位大神说的挺明白的,通过obj[]实现,在普通游览器下:

var funcName = 'getItems';
window[funcName]();

//这个等同于

getItems();
S
shinka#22·14 年前
引用 leizongminjava中的反射是神马样的?

@leizongmin 嗯 搞懂了 eval有一些弊端 之前看到过现在记不得了 下次若是想起来再跟哥们说吧

A
a272121742#23·14 年前
引用 151263javascript本来就是动态语言,根本不需要反射 比如,java中动态获得的某对象的某属性需要用反射 但是,javascript中,只需要一个中括号 var obj = {a:"b"}; ...

@shinka javascript中没有像java那样严格的语法和一些好用的东西,关于反射,java内部实现也是通过集合来完成的,依据此可以用js来模拟。只要将类、方法的名字存储在这个公共集合中集合,需要的时候,通过名字就能取出你要的类或者方法,这种模拟方式dojo和extjs都有类似的实现。

参与回复
登录后即可参与回复。登录