我有一个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方面不擅长并且让我头疼,有人可以解释一下为什么它如此复杂以及我在这里做错了什么?
答案 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();