Если вы хотите укрепить свои объекты, но у них есть функции, вы можете использовать JSON.stringify()
со вторым параметром replacer
. Чтобы предотвратить циклические зависимости от объектов, вы можете использовать var cache = []
.
В нашем проекте мы используем lodash . Для генерации журналов мы используем следующую функцию. Может использоваться для сохранения объектов в localStorage
.
var stringifyObj = function(obj) {
var cache = []
return JSON.stringify(obj, function(key, value) {
if (
_.isString(value) ||
_.isNumber(value) ||
_.isBoolean(value)
) {
return value
} else if (_.isError(value)) {
return value.stack || ''
} else if (_.isPlainObject(value) || _.isArray(value)) {
if (cache.indexOf(value) !== -1) {
return
} else {
// cache each item
cache.push(value)
return value
}
}
})
}
// create a circular object
var circularObject = {}
circularObject.circularObject = circularObject
// stringify an object
$('body').text(
stringifyObj(
{
myBooblean: true,
myString: 'foo',
myNumber: 1,
myArray: [1, 2, 3],
myObject: {},
myCircularObject: circularObject,
myFunction: function () {}
}
)
)