2014-10-14 3 views
-1

использует плагины 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)); 
    }; 
} 

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

+0

вы не можете использовать $ .ajax из jQuery, если jQuery не включен – Superdrac

+0

, если вы создаете 'AnswerQuestion' с ключевым словом' new', который выглядит так, как вы, с тех пор, как вы используете 'this', тогда вы можете захотеть рассмотреть возможность прототипирования его с помощью «SearchForAnswer» и «SearchForAnswerSuccess» – andrew

+0

Хм, не уверен, что здесь нужен нисходящий канал. @DavidB, возможно, вы захотите рассмотреть вопрос о переносе своего вопроса на http://codereview.stackexchange.com/ – Raad

ответ

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

+0

Спасибо, я сделал прочитал это и начал использовать прототип, но точно не знал, что такое differnece. больше чтение думаю. – DavidB

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