假设我们有一本书的3章,并且它们位于自己的URL上,如下所示:
现在假设我们想要考虑OO并创建2个JS对象(在jQuery的帮助下):
JS代码:
// Chapter
function Chapter(chapterId)
{
this.chapterId = chapterId;
}
Chapter.prototype =
{
getChapterId: function()
{
var chapterId = this.chapterId;
return chapterId;
},
loadChapter: function(el)
{
$(el).load( this.getChapterId + ".html" ); // Ajax
}
}
// Book
function Book()
{
// ?
}
Book.prototype =
{
// ?
}
在您看来,思考面向对象,定义对象" Book"以及其原型中的方法的最佳方式是什么?
什么是处理对象实例化的最优雅方式" Chapter"在Book.prototype?
谢谢
答案 0 :(得分:0)
当我开始编写OO样式的JavaScript时,我读了this article。那里有一些很好的技巧和解决方案!
答案 1 :(得分:0)
我只是将章节ID作为参数传递给Book
并将章节加载到数组中。像这样:
// Book
function Book(chapters) {
this.chapters = chapters.map(function(id){ return new Chapter(id) });
}
var book = new Book([1,2,3,4]);
然后,您可以创建循环章节的方法,并根据需要对其进行操作。
答案 2 :(得分:0)
你尝试过这个:
(function (namespace, chapterId) {
var Chapter = function (chapterId) {
this.chapterId = chapterId;
}
Chapter.prototype ={
getChapterId: function () {
var chapterId = this.chapterId;
return chapterId;
},
loadChapter: function (el) {
$(el).load(this.getChapterId + ".html"); // Ajax
}}
namespace.Chapter = Chapter;
})(new Book(), chapterId);
答案 3 :(得分:0)
啊我之前没有读过你的问题。我会做这样的事情:
// Chapter
var Chapter = function(chapterId) {
this.chapterId = chapterId;
}
Chapter.prototype.loadChapter: function(el) {
$(el).load( this.chapterId + ".html" ); // Ajax
}
// Book
var Book = function(chapters) {
this.chapters = (chapters) ? chapters : [];
this.numberOfChapters = (chapters) ? chapters : 0;
// assume that this has to make sence, so if it is number of chapters,
// it start with 0.
}
Book.prototype.addChapter = function () {
this.chapters.push(new Chapter(++this.numberOfChapters));
}