我搜索一种通过引用获取索引的Javascript对象的方法。
就像是:
var myRefMap = new RefMap();
var a = [{}, [], function () {}];
myRefMap.set(a[0], true);
myRefMap.set(a[1], { hello: 'world' });
myRefMap.set(a[2], 42);
myRefMap.has(a[0]); // true
myRefMap.has(a[1]); // true
myRefMap.has(a[2]); // true
myRefMap.has({}); // false
myRefMap.has([]); // false
myRefMap.has(function () {}); // false
在循环引用内的树浏览期间,我需要此对象以便优化并避免实际的重数组搜索。
谢谢,
最佳答案
如果所有存储的值都是对象,则一种基本的实现方式是:
(function () {
var instCount = 0;
self.RefMap = function () {
instCount ++;
var propName = '__RefMap' + instCount + '__';
this.has = function (o) {
return propName in o;
};
this.set = function (o) {
o[propName] = true;
}
this.remove = function (o) {
delete o[propName];
}
}
}());
//then use it like
var myRefMap = new RefMap();
编辑:数组和函数也是对象。您可以使用Object.defineProperty隐藏“ marking”属性,具体取决于您定位的浏览器。