【问题标题】:How to debug JavaScript code?如何调试 JavaScript 代码?
【发布时间】:2016-12-16 10:23:19
【问题描述】:
var myObject = {
  name: function() {
    return "Michael";
  }(),
  age: 28,
  sayName: function() {
    alert(this.name + ":" + this.age);
  }(),
  specialFunction: function() {
    myObject = this;
    if (this == myObject) altert(console.log(this.sayName));
  }
}()
};

我试图从同一对象中的其他方法调用对象的方法,但我只是得到undefined

我认为允许内部作用域对象访问外部作用域对象,但这种情况忽略了该规则。

【问题讨论】:

  • “帮我弄清楚这段代码有什么问题” - 首先发布代码,而不是一些无格式的文本。
  • 请参阅stackoverflow.com/help/formatting 格式化您的代码
  • 欢迎来到 Stack Overflow!请拿起tour,环顾四周,并通读help center,尤其是How do I ask a good question?What topics can I ask about here?。从第二个链接:“要求家庭作业帮助的问题必须包括您迄今为止为解决问题所做的工作的摘要,以及您在解决问题时遇到的困难的描述。”您还必须提供您的问题作为文本,而不是作为图像。
  • 首先,不要将所有代码放在一行中。一方面,将代码分成多行可以更轻松地缩小错误原因的范围,因为错误消息可以告诉您是哪一行导致了它。

标签: javascript javascript-objects


【解决方案1】:

试试这个

(function(window){
      var myObject = {
        name: function(){
          return "Michael";
        }(),
        age: 28,
        sayName: function(){
          alert(this.name + ":" + this.age);
        },
        specialFunction : function(){
          myObject=this;
          if(this==myObject)
          alert(console.log(this.sayName));
        }
      }
      window.myObject = myObject;
    })(window);
    
    myObject.sayName();

发生的情况是,当您调用 sayName 函数时,它会获得自己的执行环境并查找名为 myObject 的未定义对象。然后它在它的容器函数中寻找这个对象。所以我们要做的是定义这个对象并将其带入窗口对象并在那里调用函数。以便它可以找到这个对象。

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 1970-01-01
    • 2017-11-17
    • 2014-11-10
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多