私はそれのすべての子プロパティに浅いObject.freeze
を行うには、深いオブジェクトの上に再帰のポイントを理解しています。ファンクションオブジェクトの値をフリーズするポイントは何ですか?より高いレベルでの凍結が浅いため、リファレンスはすでにフリーズしています。関数オブジェクトの値自体を変更することは可能ですか?Object.freeze関数に何らかの理由はありますか?
例:
// Library Function [deepFreeze source](https://github.com/substack/deep-freeze/blob/master/index.js)
function deepFreeze (o) {
Object.freeze(o); // shallow freeze the top level
Object.getOwnPropertyNames(o).forEach(function (prop) {
if o[prop] != null // no point freezing null or undefined
&& (typeof o[prop] === "object" || typeof o[prop] === "function") {
deepFreeze(o[prop]);
}
});
return o;
};
// Usage
var x = {
y: [1,2,3],
z: function(){}
};
deepFreeze(x);
はちょうど私がここで理解していない根本的な何かがあるのかどうかを確認しようとしているか、この場合は単に関数オブジェクト、例えば変異から保護されています
x.z.foo = 3
を。 JavaScriptで
関数はまだ拡張可能なオブジェクトです。あなたのジレンマは何ですか? – MaxArt
関数は、JS内のObject(実行可能なもの)でもあります。他のオブジェクトと同様に、追加のプロパティで拡張できます。 – Thomas
関数は、プロパティを追加/削除できるオブジェクトです。ですから、一般的に、オブジェクトを完全にフリーズしたい場合は、すべての関数をフリーズする必要があります。 –