1

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

2 回答 2

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');
};
于 2013-03-11T13:04:52.697 回答
2

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);
于 2013-03-11T13:07:06.933 回答