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 ready イベントで。

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

フェリックスはあなたの問題が何であるかをあなたに伝えようとしています。ここにそれが明示されています:

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 に答える