Вход

Просмотр полной версии : функция is not a function


ololosh
21.12.2012, 19:36
(подключен джейквери. Из него использую $.ajax)
Есть функция-конструктор:

function CreateModal() {
this.content;

this.getContent = function(data) {
//...
};

this.showContent = function() {
$.ajax({
//...
success: function(data) {
this.content = this.getContent(data);
//...
}
});
};
}


Создаю объект от нее:

var obj = new CreateModal();

На строке this.content = this.getContent(data); браузер выдает мне ошибку:
TypeError: this.getContent is not a function

Почему? Как такое возможно? Ведь это ж функция. Интерпретатор ведь должен по цепочке замыканий найти эту this.getContent()

ololosh
21.12.2012, 20:25
Тогда и для свойства this.content нужно так же поступить в моём случае? Переделать его в self.content?

function CreateModal() {
var self = this;

this.content;

this.getContent = function(data) {
//...
};

this.showContent = function() {
$.ajax({
//...
success: function(data) {
self.content = self.getContent(data);
//...
}
});
};
}

ololosh
21.12.2012, 21:11
Если контекст вызова не наследуется через замыкание, почему тогда у меня срабатывает такой пример?

function Create() {
this.content;

this.getContent = function() {
return "HELLO";
};

this.showContent = function() {
this.content = this.getContent();
alert(this.content);
};
}

var obj = new Create();
obj.showContent();

По идее, в строчке
this.content = this.getContent();
я должен увидеть ошибку getContent is not a function
Но ее нету...

godofjavascript
21.12.2012, 22:03
прокэплю и скажу что

внутри обекта

{
//...
success: function(data) {
this.content = this.getContent(data);
//...
}
}


в функции success слово this ссылается на сам этот обьект

{ success: function() {} }

а не на экземпляр класса

CreateModal

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел .
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/

Задавайте конкретные вопросы по ходу дела.

godofjavascript
21.12.2012, 23:53
Если функция не вызвана как конструктор, то this ссылается на контекст вызова, болван.
Мне вот все интересно, этот пятушок что, действительно считает что $.ajax() вызывает метод success обьекта параметров как конструктор класса CreateModal)), или он так пошутил?

в голос ржал) доставил)))

UPD 1:
Регистрация: 18.06.2012
Не, он не притворяется пасоны)))))) он на самом деле ламо) ахахах