Структура объекта javascript

использовал плагины JavaScript и создал свои собственные вспомогательные функции, теперь мне нравится создавать свой собственный плагин, который можно использовать на всех сайтах, создавая объект и вызывая его методы. Кажется, есть много разных способов сделать это, и я сбиваюсь с толку.

Надеясь, что кто-то может взглянуть на мой подход и посоветовать, и, возможно, дать мне хорошие ссылки для чтения.

function AnswerQuestion(query) {
 this.query = query;
 this.template = 'answers_searchresult';
 this.container = '#answers';

 this.SearchForAnswer = function () {
 var O = this;
 $.ajax({
 type: "POST",
 datatype: 'json',
 url: "/WebServices/GlobalWebService.asmx/AnswersSearch",
 data: JSON.stringify({ q: this.query }),
 contentType: 'application/json; charset=utf-8',
 success: function (data) {
 O.SearchForAnswerSuccess(data.d);
 },
 error: function (data) { log("Answers Search Fail"); }
 });
 };

 this.SearchForAnswerSuccess = function (data) {
 var template = Handlebars.template[this.template];
 $(this.container).append(template(data));
 };
}

Что-то не так с тем, что я делаю? Мой результат - иметь плагин, который я могу активировать на любой странице, чтобы активировать поиск и представить результаты.

1 ответ

Фактически, javascript является объектно-ориентированным.

То, что вы сделали, - это один из способов создания объекта, но не самый лучший. Лучшим способом создания объектов в javascript является использование prototype объекта (ближайшего к наследованию).

поэтому ваш код будет выглядеть примерно так:

function AnswerQuestion(query) {
 this.query = query;
 this.template = 'answers_searchresult';
 this.container = '#answers';
};

AnswerQuestion.prototype.SearchForAnswer = function () {
 var O = this;
 $.ajax({
 type: "POST",
 datatype: 'json',
 url: "/WebServices/GlobalWebService.asmx/AnswersSearch",
 data: JSON.stringify({ q: this.query }),
 contentType: 'application/json; charset=utf-8',
 success: function (data) {
 O.SearchForAnswerSuccess(data.d);
 },
 error: function (data) { log("Answers Search Fail"); }
 });
};

AnswerQuestion.prototype.SearchForAnswerSuccess = function (data) {
 var template = Handlebars.template[this.template];
 $(this.container).append(template(data));
 };
}

чем вы бы инициализировали свой объект следующим образом:

var answerQuestion = new AnswerQuestion();

Это просто краткое объяснение, конечно... javascript имеет шаблоны проектирования для объектов с именами, паразитное наследование...

Предлагаю начать здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript

licensed under cc by-sa 3.0 with attribution.