gpt4 book ai didi

javascript - 挖空如何隐藏对象属性

转载 作者:行者123 更新时间:2023-12-02 17:43:29 26 4
gpt4 key购买 nike

我是 knockout.js 的新手,但正在提高我的速度。我真正沮丧的一件事是如果我这样做JSON.stringify(koModel);我得到空对象 {} .

我知道我需要使用ko.toJSON(koModel);我得到了我需要的东西,但现在我感兴趣的是:

knockout 如何隐藏所有属性JSON.stringify()没有枚举它们吗?

更新

根据 @dandavis 评论,我已经测试过了,是的 - JSON.stringify()根本不显示功能,所以我的模型充满了 ko.observable()ko.observableArray()我得到一个空物体。

最佳答案

我实际上没有使用过 knockout ,但一个相当好的猜测是模型属性实际上是委托(delegate)给包装对象的访问器函数(并且执行更多操作,例如通知更改)。下面是一些表现出相同行为的代码:

var obj = { a: 1, b : 2 };

var ko = Object.create(null, {
_obj : { value : obj, enumerable: false },

a : {
get : function() { return this._obj.a },
set : function(v) { this._obj.a = v; console.log('Dispatch change event!') }
},

b : {
get : function() { return this._obj.b },
set : function(v) { this._obj.b = v; console.log('Dispatch change event!') }
}
});

ko.b = 3;
console.log(ko.a, ko.b);
console.log(JSON.stringify(ko));

是的,JSON.stringify 不考虑函数(根据 JSON spec )和不可枚举属性。两者都可以在上面的示例中观察到。

根据 haim770 的评论,它更加直接,因为属性本​​身就是函数,它们会被 JSON.stringify 方法忽略:

var ko = {
a : function(v) {
if (!arguments.length) return obj.a;
else { obj.a = v; console.log('Dispatch change event!') }
},
b : function(v) {
if (!arguments.length) return obj.b;
else { obj.b = v; console.log('Dispatch change event!') }
},
}

关于javascript - 挖空如何隐藏对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21981668/

26 4 0
文章推荐: javascript - 如何获取所有 div 中特定
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com