TypeError xxx不是一个函数

TypeError xxx is not a function

本文关键字:一个 函数 xxx TypeError      更新时间:2023-09-26

所有,我正在努力解决一个错误,上面写着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就绪事件.

function loadTempleteContent(templeteId)
{
    var jData=[{name: 'jerry'},{name: 'mike'},{name: 'claire'}];
    var tmp = new LayoutTemplete($("#currentTmpContainer"),templeteId,jData);
}

不能调用未定义的函数。这与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');
};

Felix试图告诉你你的问题是什么,这里是明确的:

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);