bootd
@bootd
Гугли и ты откроешь врата знаний!

Почему я получаю в консоль undefined?

Добрый день!
Есть такой код:
;(function($, window, document, undefined) {
	
	'use strict';

	var AdminFields = function(template, appendBlock){
		// Шаблон для вставки новых блоков с полями
		this.template = $(template).clone(true, true);

		// Блок, куда будет уставлять блоки
		this.appendBlock = $(appendBlock);

		console.log(this.appendBlock);
	};

	AdminFields.prototype = {

		// Добавить блок с полями
		addFields: function(){
			var self = this;

			console.log(self.appendBlock);
		},

		// Удалить последний блок с полями
		removeFields: function(){
			var self = this;

		},

		// Удалить все добавленные блоки с полями
		removeAllFields: function(){
			var self = this;

		}
	};

	window.AdminFields = AdminFields;

})(jQuery, window, document);


Вызов методов:
var adminFields = new AdminFields('#cms_formfieldshablone', '#newFields');
	
	console.log(adminFields);
	
	$('#addFields').on('click', adminFields.addFields);
	
	$('#removeFields').on('click', adminFields.removeFields);
	
	$('#removeAllFields').on('click', adminFields.removeAllFields);


Там есть метод addFields, почему он, при вызове, выводит мне в консоль undefined, а в самом конструкторе, строка console.log(this.appendBlock); как и должно быть, выводит в консоль мой элемент?

Пример на fiddle
  • Вопрос задан
  • 209 просмотров
Решения вопроса 3
Потому что там this - DOM element button#addFields

$('#addFields').on('click', adminFields.addFields);

В этом коде adminFields.addFields - это не вызов метода addFields объекта adminFields, а просто мы передаем ссылку на функцию.
Как пофиксить:
$('#addFields').on('click', function() {
  adminFields.addFields();
});

$('#addFields').on('click', adminFields.addFields.bind(adminFields));
Ответ написан
dimmond_pro
@dimmond_pro
Jedi
Попробуйте
$('#addFields').on('click', () => adminFields.addFields());
Ответ написан
lazalu68
@lazalu68
Salmon
Ну можно например bind сделать, как-то так
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
26 нояб. 2024, в 12:58
30000 руб./за проект
26 нояб. 2024, в 12:56
1500 руб./в час
26 нояб. 2024, в 12:53
2500 руб./за проект