使用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 :(得分: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