对象覆盖不起作用
Object overwriting not working
我的JavaScript对象是:
var MyObject = {
DOM: function(tagName){
if(!this.isElement){
var found = document.getElementsByTagName(tagName);
this.isElement = true;
for(i in found)
this[i] = found[i];
} else{
var found = this[0].getElementsByTagName(tagName);
for(i in found)
this[i] = found[i];
}
return this;
}
}
效果很好:
MyObject.DOM("div");
问题是当我再次记录对象时:
MyObject.DOM("div");
console.log(MyObject);
问题是它记录:
>对象{0:div#lower。cl, 1:div.higher, find: function, isElement: true}
但实际上我想让它记录:
>对象{find: function}
所以当我再次运行MyObject
时,我不希望它保留找到的元素。
每次使用时都要重新加载对象
这里有一种实现方法。最好是坚持让对象尽可能地保持不可变。你试图用一个对象的一个实例来做所有的事情,这是行不通的:
function MyObject() {
this.length = 0;
}
MyObject.prototype.DOM = function (tagName) {
var found = new MyObject(),
batch,
toSearch,
i,
j,
z = 0;
if (this === MyObject) {
toSearch = [document];
} else {
toSearch = Array.prototype.slice.call(this);
}
for (i = 0; i < toSearch.length; i += 1) {
batch = toSearch[i].getElementsByTagName(tagName);
for (j = 0; j < batch.length; j += 1) {
found[found.length] = batch[j];
found.length += 1;
}
}
return found;
}
MyObject.DOM = MyObject.prototype.DOM;
http://jsfiddle.net/Sygdm/你可以像这样给你的类添加一些'私有'字段:
var MyObject = (function() {
var instance = {};
return {
DOM: function(tagName){
if(!instance.isElement){
var found = document.getElementsByTagName(tagName);
instance.isElement = true;
for(i in found)
instance[i] = found[i];
} else{
var found = instance[0].getElementsByTagName(tagName);
for(i in found)
instance[i] = found[i];
}
return this;
}
}
})();
不确定这是不是你想要的
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 覆盖单击事件不起作用
- 由于覆盖(仅限 IE9),单击 事件不起作用
- 茉莉花+伊斯坦布尔覆盖范围不起作用
- 覆盖 CSS 不起作用
- 使用javascript打印标记中的类触发时,覆盖不起作用
- javascript覆盖在生产中不起作用
- 可编辑元素,覆盖不起作用的原始文本(x-Editable)
- 当用标签形式覆盖时,为什么函数隐藏/显示元素不起作用
- 站点覆盖不起作用&;未捕获的ReferenceError:未定义closeav &;
- 对象覆盖不起作用
- 当HTML/LINK通过ajax加载时,jQueryTOOLS覆盖灯箱不起作用
- FindMany覆盖不起作用.Ember-data
- 覆盖文件在node js中不起作用