包装成匿名函数后,JavaScript代码无效

时间:2013-10-16 01:54:09

标签: javascript

我有这个代码..它包装在匿名函数

(function() {
  console.log("writting dataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

window.onMessage1 = function(messageEvent) {
  console.log("writting dataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  console.log(messageEvent.data["color"]);
  return $("form#credit-info-form").append(messageEvent.data["color"]);
 };

}).call(this);

错误是'TypeError:无法读取未定义'

的属性'数据'

但是当我在没有匿名函数换行的情况下执行上面的代码时,它正在工作..

同样的错误在函数名称上也解决了,使用make'onMessage1'到'window.onMessage1'全局范围..

任何解决方案如何处理anoymous函数?

由于

2 个答案:

答案 0 :(得分:0)

messageEvent参数为undefined,这意味着您在调用时不会将参数传递给window.onMessage1

// this is the parameter---------v
window.onMessage1 = function(messageEvent) {
  console.log("writting data");

// you use it here--v
  console.log(messageEvent.data["color"]);

  //---------------------------and here--------v
  return $("form#credit-info-form").append(messageEvent.data["color"]);
};

所以当你调用它时,你需要传递一个具有data属性的参数。

window.onMessage1(my_object);

答案 1 :(得分:0)

这将有效

(function() {
    console.log("writting dataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    window.onMessage1 = (function(messageEvent) {
        console.log("writting dataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        console.log(messageEvent.data["color"]);
        //return $("form#credit-info-form").append(messageEvent.data["color"]);
    });
})();

调用函数

onMessage1({'data':{'color':'red'}});

但是$("form#credit-info-form")似乎是id=credit-info-form的表单并且您正在追加messageEvent.data["color"],那就是您正在做的事情?对我来说似乎不对。

另外,为什么要使用匿名功能?由于您使用window.onMessage1 = function(){...}使函数全局化。