Javascript TypeError:我需要解释

时间:2014-08-15 00:35:41

标签: javascript jquery

我有一个javascript代码

 Html5Template_300x250 = function(config) {
      this.config = config;
      var self = this;
      adkit.onReady(this.init());

  };
  Html5Template_300x250.prototype = {
      // Function That Creates Element Var
      d: function(id) {
          return document.getElementById(id);
      },

      // Initialize DCO HTML5 template
      init: function() {

          adkit.onReady(this.handleSVData);

      },
      handleSVData: function() {
          var myData = adkit.getSVData("varName");

          alert(myData);

          this.startAd();

      },

      startAd: function(data) {
          alert("test2");

      }
  }

在上面的代码中,我使用了外部javascript adkit.js并在我的代码中使用了该方法。初始方法以

开始
 adkit.onReady(this.init());

它正在调用一个init函数,然后调用其他方法,包括handleSVData,它从json文件中获取一个值,该文件位于根文件夹中

var myData = adkit.getSVData("varName");

代码的一部分工作正常但在那行之后我正在调用另一种方法

this.startAd();

但是这种方法不起作用,我收到错误

TypeError: this.startAd is not a function

我在javascript方面不擅长并且让我头疼,有人可以解释一下为什么它如此复杂以及我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

handleSVData调用adkit时,它会在不是Html5Template_300x250实例的范围内调用 - 这就是this没有startAd的原因方法。

至于adkit.onReady(this.init());行。

adkit.onReady期望函数作为参数。它存储此函数变量,并在onReady事件发生时调用。这是由adkit.onReady(this.handleSVData);行正确设置的。但是,this.init()是对init功能的调用,无论adkit.onReady(this.init());返回什么,您的行adkit.onReady都会转到init。但它不会返回任何内容 - 您将undefined作为参数传递。

  init: function() {
      var template = this;
      adkit.onReady(function(){
        template.handleSVData();
      });
  },

更改行

adkit.onReady(this.init());

this.init();