...如果我有以下构造函数,然后创建该类的实例:
/* Gallery */
function Gallery( _horseName ){
this.horseName = _horseName
this.pixList = new Array();
}
var touchGallery = new Gallery( "touch" )
...如何根据horseName的值获取Gallery对象?
考虑实施类似的东西:
Gallery.prototype.getGalleryByHorseName = function( _horseName ){ /* to be implemented */}
......但是却陷入了困境。是否有更清洁或规范的方法来实现这一目标?最终我还必须在jQuery中访问该Gallery对象。
提前致谢
答案 0 :(得分:4)
最简单的解决方案是将创建的对象保留在对象中。
var myGalleries = {};
myGalleries['touchA'] = new Gallery( "touchA" );
myGalleries['touchB'] = new Gallery( "touchB" );
然后,您可以通过传递密钥快速访问它们。
var galleryOfTouchB = myGalleries['touchB'];
答案 1 :(得分:2)
你可以这样做。我认为这是相当干净和规范的:
var Galleries = (function() {
var all = [],
galleriesObj = {};
galleriesObj.create = function(horseName) {
var gallery = {
horseName: horseName,
pixList: []
};
all.push(gallery);
return gallery;
};
galleriesObj.find = function(horseName) {
var ii;
for (ii = 0; ii < all.length; ii += 1) {
if (all[ii].horseName === horseName) {
return all[ii];
}
}
return null;
};
return galleriesObj;
}());
var touchGallery = Galleries.create('touch');
var foundGallery = Galleries.find('touch');
答案 2 :(得分:1)
你可以通过编写一个包含列表到所有Gallery实例的类,然后编写一个迭代每个Gallery对象的函数并返回一个具有匹配名称的函数,以一种很好的方式完成它。
Supaweu展示了一个非常好的和简单的(非oo)示例
答案 3 :(得分:0)
你错过了一两步。您需要一个Gallery对象数组,然后在检查_horseName属性时遍历数组。
答案 4 :(得分:-1)
你可以通过创建一个充满了已创建的马名画廊的对象来实现它:
/* Gallery */
function Gallery( _horseName ){
this.horseName = _horseName
this.pixList = new Array();
Gallery.galleryList[_horseName] = this; // Add this gallery to the list
}
Gallery.galleryList = {};
var touchGallery = new Gallery( "touch" )
var galleryByName = Gallery.galleryList["touch"];