javascript函数返回对象的问题?

新手上路,请多包涵

var processMessageData = function(b) {
    if (!b) {
        return null 
    }
    if (typeof (b) == "string") {
        b = (new Function("return " + b))()
    }
    if (!b.id) {
        return null 
    }
    var a = (new Function("return " + $("#" + b.id).val()))();
    a.requestFields = b.requestFields || {};
    a.responseFields = b.responseFields || {};
    return a
}

今天看到一段代码完全看不明白,上面的 b = (new Function("return " + b))()就是返回b吧,为什么要这样写?还有就是a应该是个对象,作用域应该在函数内,为什么可以做返回值?希望高手解答一下。

阅读 4k
3 个回答

假设$("#" + b.id).val()取到的是{requestFields:123},那替换一下就成为了

function f() {
  return {requestFields:123}
}

了,相应的a就是返回的对象{requestFields:123}

b = (new Function("return " + b))()就是返回b吧

这个要分情况,比如b的初值是"1+2"时,最后得到b=3;可以看下Function的用法。

虽然不知道这是这位大神为什么要这样写,但是很坑,不建议用。

  1. 很绕,一直兜圈子
  2. new Function容易执行恶意代码
  3. 如果传入Function的字符串不符合JS代码规范会报错
var processMessageData = function(b) {
    if (!b) {
        return null 
    }
    if (typeof (b) == "string") {
    // 这里的目的是将b由字符串转换成其它数据类型(上下文看)
    // 简单粗暴的理解就是将string类型的两边的引号拿掉,当成JS来执行
    // 类似于:b=eval(b)
        b = (new Function("return " + b))()
    }
    if (!b.id) {
        return null 
    }
    // 获取到元素ID等于b.id的value值,然后将其转换成其它数据类型,同上面的注释
    var a = (new Function("return " + $("#" + b.id).val()))();
    a.requestFields = b.requestFields || {};
    a.responseFields = b.responseFields || {};
    return a
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题