TypeError xxx不是函数

时间:2013-03-11 12:48:01

标签: javascript

所有,我正在努力解决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);
}

2 个答案:

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