我明白在一個深層對象上遞歸的意義,以便對它的每個子屬性做一個淺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
。
函數仍然是一個可以擴展的對象。你的困境是什麼? – MaxArt
函數也是JS中的一個對象(只有一個可以執行)。它可以像其他任何對象一樣擴展。 – Thomas
函數是可以添加/刪除屬性的對象。所以一般來說,如果你想要一個對象完全凍結,你會想凍結任何函數。 –