新足迹

 找回密码
 注册

精华好帖回顾

· 3年之后的十一回目! (2022-12-20) joaquin · 参加活动 手机摄影大赛-田园的都市 (2015-2-10) 小河流水
· 大头家常菜 -- 双菇菜心鱼面筋 (2008-12-15) datou2z · 天凉好个秋--给我们的少年青年&美好青涩甜蜜的人生(原创小说连载,更新完毕) (2020-8-19) ccccjessicacccc
Advertisement
Advertisement
查看: 1355|回复: 8

javascript如何干这样的事情 [复制链接]

头像被屏蔽

禁止发言

发表于 2011-11-7 12:21 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
obj.additem = 'additem_'+'TableA';

function additem_TableA() {
    alert('dd');  
}

我希望这第一行相当于 obj.additem = additem_TableA
当调用obj.additem,就等于调用function additem_TableA。

但是这个名字是不固定的,所以只能使用字符串的值。
如何能把字符串的函数名对应到函数呢?

我试了 question.additem = eval('additem_'+'TableA'+'()');
这样会直接调用additem_TableA(),而不是返回个函数指针。
Advertisement
Advertisement

发表于 2011-11-7 12:48 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你是说,动态地调用不同的function?
岂不是需要预先定义很多不同的function?
obj.additem 如果不是函数,你又怎么能调用它?

你要的可能是一种函数的多态性把?一个函数根据参数的不同做不同的事情?

评分

参与人数 1积分 +2 收起 理由
linkspeed + 2 谢谢奉献

查看全部评分

头像被屏蔽

禁止发言

发表于 2011-11-7 12:57 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
对,调用不同的函数。

都是additem,但是item的属性是不一样的。
有的是2个,有的是3个,名字也不一样。

这个obj最开始就是个hash,从c#序列化来的。
然后根据里面某个值的不同选择不同的函数插进去的,
所以无法用同样的函数名。
那个值就是比如TableA, TableB等等。
头像被屏蔽

禁止发言

发表于 2011-11-7 13:01 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
question.additem = window['additem_'+Format];

这个可以工作。不过看上去不是最佳方案。

Format = TableA, TableB

发表于 2011-11-7 13:12 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
没有这方面的经验,
如果换个思路用apply,不知道能不能满足你的要求
函数只有一个函数additem,用apply来调用就能满足多态的情形,它会自动适用你所说的不同的attribute的情况

如果additem 函数确实是做同一类事情,推荐你用apply来解决

[ 本帖最后由 典 于 2011-11-7 12:14 编辑 ]

发表于 2011-11-7 13:37 |显示全部楼层
此文章由 frankflysky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 frankflysky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
window[methodName] is a good solution better than eval();
Advertisement
Advertisement

发表于 2011-11-7 20:12 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
var func={
     additem_TableA:function () {
      alert('dd');  
     }
}

var obj={}   
obj.additem = func['additem_'+'TableA']();

obj.additem  // this will alert the message

 //是这个意思吗

//eval 有安全性和效率的问题

javascript 没有重载 
但是可以传任意个数的 参数
例如
fuc(a,b,c)

fuc(3,4)
fuc(3)
fuc(3,4,5)
都会调用fuc 函数
fuc(a,b, c){
  可以通过 augments.length  和 augments [ i ] 来控制参数的 个数啊 类型啊  没有的 就是undefined


[ 本帖最后由 o2h2o 于 2011-11-8 10:25 编辑 ]

评分

参与人数 1积分 +2 收起 理由
linkspeed + 2 谢谢奉献

查看全部评分

发表于 2011-11-7 20:49 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有时候处理很多参数的时候可以这样用
func(  /* object */  option){
  if (option.opt1==="1") then bla bla

}
option ={op1: "1", opt2:2 }

这样可以管理多个参数 也不乱, 无论特定参数有没有value 都没关系
还可以任意顺序
和命名

[ 本帖最后由 o2h2o 于 2011-11-8 10:21 编辑 ]

评分

参与人数 1积分 +2 收起 理由
linkspeed + 2 谢谢奉献

查看全部评分

发表于 2011-11-7 22:43 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
obj.additem(argsObj);

注意 1. 有括号.
     2. 只有一个参数,详细解释参见上面o2h2o的帖子。

评分

参与人数 1积分 +2 收起 理由
linkspeed + 2 谢谢奉献

查看全部评分

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部