这是我的带有样本数据的对象
Object {map: Array[10], health: 100, ai: Array[4]}
ai: Array[4]
0: THREE.Object3D
1: THREE.Object3D
2: THREE.Object3D
3: THREE.Object3D
length: 4
__proto__: Array[0]
health: 100
map: Array[10]
无法找出为什么会出现此错误..有人帮忙吗?
这是我的带有样本数据的对象
Object {map: Array[10], health: 100, ai: Array[4]}
ai: Array[4]
0: THREE.Object3D
1: THREE.Object3D
2: THREE.Object3D
3: THREE.Object3D
length: 4
__proto__: Array[0]
health: 100
map: Array[10]
无法找出为什么会出现此错误..有人帮忙吗?
这是循环参考检测器:
o = {a: 1, b:2, c:{d:3, e:4}, q:[1,2,3,4,5,{f:6,g:7}]}
o.o = o
console.log(o)
var done = []
function circRefDetec(o, path) {
done.push(o)
for (i in o) if (typeof o[i] == 'object') {
if (done.indexOf(o[i]) >= 0) {
console.log('CIRCULAR REFERECE DETECTED:', path +'.'+ i)
} else {
console.log(i, ':')
circRefDetec(o[i], path +' '+ i)
}
}
}
circRefDetec(o, 'obj')
对象的属性之一包含对对象本身的引用(或对子对象之一的递归引用)。虽然这很好用,但将对象转换为 JSON 会产生无限递归。
您可以使用dojox.json.ref
来查找循环引用。此代码打印您的 json 表示objectWithCircularReferences
:
require(["dojox/json/ref"], function(){
console.log(dojox.json.ref.toJson(ko.toJS(objectWithCircularReferences)));
});
控制台输出中出现的任何“$ref”子字符串都将帮助您定位循环引用。如果您愿意,也可以像这样将此 json 输出通过管道传输到全局变量 ZZZ:
require(["dojox/json/ref"], function(){
window.ZZZ = dojox.json.ref.toJson(ko.toJS(objectWithCircularReferences));
});
当然,您需要事先包含 dojo 库。在一个 html 文件中:
<script src="//yandex.st/dojo/1.9.1/dojo/dojo.js"></script>
在萤火虫控制台中:
include("//yandex.st/dojo/1.9.1/dojo/dojo.js")
在 Chrome 控制台中:
SCRIPT = document.createElement('script');
SCRIPT.src = '//yandex.st/dojo/1.9.1/dojo/dojo.js';
document.body.appendChild(SCRIPT);