我正在尝试使用以下函数对mousewheel
事件进行字符串化。该函数在其他实例中工作正常,但在这种情况下,我得到Maximum call stack size exceeded
。我怎样才能使它只返回n th 级别的属性/方法?
function cloneAsObject(obj) {
if (obj === null || !(obj instanceof Object)) {
return obj;
}
var temp = (obj instanceof Array) ? [] : {};
for (var key in obj) {
temp[key] = cloneAsObject(obj[key]);
}
return temp;
}
答案 0 :(得分:1)
修改:下面的原始答案会导致错误:
Uncaught TypeError: Converting circular structure to JSON
因此递归水平不是问题(正如Alexandre Dupriez已经评论过的那样)。这是一个返回简单字符串表示的函数,忽略嵌套对象和函数(请参阅此答案Converting circular structure to JSON):
function simpleStringify (obj){
var simpleObject = {};
for (var prop in obj ){
/*if (!obj.hasOwnProperty(prop)){
continue;
}*/
if (typeof(obj[prop]) == 'object'){
continue;
}
if (typeof(obj[prop]) == 'function'){
continue;
}
simpleObject[prop] = obj[prop];
}
return JSON.stringify(simpleObject);
}
原始回答:只需使用第二个参数计算递归级别。例如:
function cloneAsObject(obj, level) {
if (level >= 100 || obj === null || !(obj instanceof Object)) {
return obj;
}
var temp = (obj instanceof Array) ? [] : {};
for (var key in obj) {
temp[key] = cloneAsObject(obj[key], level + 1);
}
return temp;
}