所有,我正在努力解决TypeError: curTemplete.addSection is not a function
的错误,请原谅我不熟悉js OO,请帮助我复习我的问题。感谢。
代码如下所示。
Templete.js
LayoutTemplete=function(currentTmpContainer,templeteId,data)
{
var curTemplete = this;
curTemplete.addSection(null, null);//this line run with error above.
this.addSection = function(uiItem, data) {
alert('ddd');
};
};
在 dom ready事件。
function loadTempleteContent(templeteId)
{
var jData=[{name: 'jerry'},{name: 'mike'},{name: 'claire'}];
var tmp = new LayoutTemplete($("#currentTmpContainer"),templeteId,jData);
}
答案 0 :(得分:7)
在定义函数之前无法调用函数。这与OOP无关。考虑这个例子:
foo();
var foo = function() {
alert(42);
};
它会引发类似的错误。
在访问之前定义函数/ 属性
this.addSection = function(uiItem, data) {
alert('ddd');
};
this.addSection(null, null);
更好的是,在原型上定义addSection
,这样每次创建LayoutTemplete
的实例时都不会创建新函数。
LayoutTemplete = function(currentTmpContainer,templeteId,data) {
this.addSection(null, null);
};
LayoutTemplete.prototype.addSection = function(uiItem, data) {
alert('ddd');
};
答案 1 :(得分:2)
菲利克斯试图告诉你你的问题是什么,这里明确指出:
var curTemplete = this;
curTemplete.addSection(null, null);//this line run with error above.
在这里,您引用并尝试调用尚未分配值的curTemplete.addection
,因此它会解析为undefined
。尝试调用时,undefined不是函数(如错误告诉你的那样)。在下面的作业之前,addSection
未定义:
this.addSection = function(uiItem, data) {
alert('ddd');
};
现在已经定义了。在通话之前移动作业(如果您要将this
指定给局部变量,您也可以使用它):
var curTemplete = this;
curTemplete.addSection = function(uiItem, data) {
alert('ddd');
};
curTemplete.addSection(null, null);