javascript对象的结构

时间:2014-10-14 11:37:16

标签: javascript oop

使用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 个答案:

答案 0 :(得分: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