返回JavaScript中的引用
代码如下: 我正在尝试获取返回JavaScript中的引用,javascript,Javascript,代码如下: 我正在尝试获取collection.prototype.add以返回一个引用,这样最终警报将显示testing,testing,123,testing。有没有办法完成我在这里要做的事情 HTML: 在JavaScript中,创建所需的引用是不可能的。您可以得到的最接近的对象是嵌套对象或闭合对象,或者只是将其复制过来,如下所示: var collection = function() { this.items = {}; }; collection.prototype.ad
collection.prototype.add
以返回一个引用,这样最终警报将显示testing,testing,123,testing
。有没有办法完成我在这里要做的事情
HTML:
在JavaScript中,创建所需的引用是不可能的。您可以得到的最接近的对象是嵌套对象或闭合对象,或者只是将其复制过来,如下所示:
var collection = function() {
this.items = {};
};
collection.prototype.add = function(sElmtId) {
return this.items[sElmtId] = {};
};
collection.prototype.bind = function() {
for(var sElmtId in this.items) {
var element = document.getElementById(sElmtId);
for(var x in element) {
this.items[sElmtId][x] = element[x];
}
}
};
var col = new collection();
var obj = {};
obj = col.add('spantest');
col.bind();
alert(obj.innerHTML);
但这并不是真正的“约束”。如果需要这种功能,就必须使用嵌套对象,这很可能会破坏语法的甜点
在JavaScript中,创建所需的引用是不可能的。您可以得到的最接近的对象是嵌套对象或闭合对象,或者只是将其复制过来,如下所示:
var collection = function() {
this.items = {};
};
collection.prototype.add = function(sElmtId) {
return this.items[sElmtId] = {};
};
collection.prototype.bind = function() {
for(var sElmtId in this.items) {
var element = document.getElementById(sElmtId);
for(var x in element) {
this.items[sElmtId][x] = element[x];
}
}
};
var col = new collection();
var obj = {};
obj = col.add('spantest');
col.bind();
alert(obj.innerHTML);
但这并不是真正的“约束”。如果需要这种功能,就必须使用嵌套对象,这很可能会破坏语法的甜点
您的问题在于这一行:
this.items[sElmtId] = document.getElementById(sElmtId);
这将用DOM节点覆盖当前分配给This.items[sElmtId]
的对象。相反,应将节点指定给该对象的属性:
this.items[sElmtId].node = document.getElementById(sElmtId);
这样,obj.node
将始终引用当前节点:
alert(obj.node.innerHTML);
旁注:fiddle的问题还在于,您在DOM尚未构建时执行代码(
没有包装(head)
),因此它无法找到#spantest
。DOM准备好后,您必须运行代码,no wrap(body)
,onDomRead
或onLoad
,您的问题是这一行:
this.items[sElmtId] = document.getElementById(sElmtId);
这将用DOM节点覆盖当前分配给This.items[sElmtId]
的对象。相反,应将节点指定给该对象的属性:
this.items[sElmtId].node = document.getElementById(sElmtId);
这样,obj.node
将始终引用当前节点:
alert(obj.node.innerHTML);
旁注:fiddle的问题还在于,您在DOM尚未构建时执行代码(
没有包装(head)
),因此它无法找到#spantest
。DOM准备好后,您必须运行代码,no wrap(body)
,onDomRead
或onLoad
,我希望obj作为对该.items[sElmtId]的引用,因此当稍后使用.bind()更新该.items[sElmtId]时,obj将指向与该.items[sElmtId]相同的DOM元素需要。需要这个代码的原因有点复杂。在更大版本的代码中,我有实例化DOM元素的对象。我希望这些对象具有一个属性(例如,this.dom_elmt),该属性指向它们负责渲染的dom元素。我之所以在事后尝试创建DOM引用,是因为我是为IE6兼容性而写的。在内存中构造DOM片段对于IE6中的大页面来说太慢了。我必须通过字符串创建HTML,在函数退出后插入DOM,然后创建指向DOM元素的链接。我希望obj是对该.items[sElmtId]的引用,因此当稍后使用.bind()更新该.items[sElmtId]时,obj将指向与该.items[sElmtId]相同的DOM元素需要。需要这个代码的原因有点复杂。在更大版本的代码中,我有实例化DOM元素的对象。我希望这些对象具有一个属性(例如,this.dom_elmt),该属性指向它们负责渲染的dom元素。我之所以在事后尝试创建DOM引用,是因为我是为IE6兼容性而写的。在内存中构造DOM片段对于IE6中的大页面来说太慢了。我必须通过字符串创建HTML,在函数退出后插入DOM,然后创建指向DOM元素的链接。