2013-03-11 2 views
0

Все, я борюсь с ошибкой, которая говорит TypeError: curTemplete.addSection is not a function, Пожалуйста, простите, что я не знаком с js OO, Пожалуйста, помогите разобраться с моей проблемой. Благодарю.TypeError xxx не является функцией

Код выглядит следующим образом.

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

В йоте готового события.

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

Получил JSFiddle? Кроме того, что делает ваш код? Было бы полезно, если бы мы знали – starbeamrainbowlabs

+0

Какую утилиту вы используете для шаблонов? Наиболее вероятно, что функция не определена, потому что вы еще не загрузили утилиту templating. Но во-первых, вы используете загрузчик AMD? Потому что это также повлияет на КОГДА утилита загружается. –

+3

В данный момент вы вызываете 'curTemplete.addSection', свойство еще не определено. Вы делаете это только после инструкции 'if'. Если вы переместите оператор 'if' после того, как вы назначили свойство, оно должно быть в порядке. –

ответ

7

Вы не можете вызвать функцию до ее определения. Это не имеет ничего общего с ООП. Рассмотрим этот пример:

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'); 
}; 
+0

Большое спасибо, я надеюсь, что могу увеличить время. –

2

Феликс пытается сказать вам, что ваш вопрос, здесь явно:

var curTemplete = this; 

curTemplete.addSection(null, null);//this line run with error above. 

Здесь вы ссылаетесь и пытаетесь вызвать curTemplete.addection, которое не было присвоено значение еще, так это разрешается до undefined. При попытке вызова неопределенное значение не является функцией (как сообщает об ошибке). addSection не определяется до присвоения ниже:

this.addSection = function(uiItem, data) { 
    alert('ddd'); 
}; 

Теперь это определено. Переместить назначение перед вызовом (и если вы собираетесь назначить this локальной переменной, вы можете также использовать его):

var curTemplete = this; 
curTemplete.addSection = function(uiItem, data) { 
    alert('ddd'); 
}; 
curTemplete.addSection(null, null); 
+0

Благодарим вас за любезный ответ и комментарии. Это хорошо. –

Смежные вопросы