-1
MDN聲稱通過在對象執行.freeze
:Object.freeze並不真正凍結
沒有什麼可以被添加到或從設置凍結對象的屬性中移除。
現在來看看這個例子:即使對象是凍結
var span = document.createElement("span");
span.id = "foo";
console.log(span.id); //foo
Object.freeze(span);
span.setAttribute("id", "bar");
console.log(span.id); //bar
的id
屬性更改。通過span.hasOwnProperty("id")
我們知道id
確實是span
的地方財產。
整個DOM只是JavaScript中的一個對象,因此應該防止id
被更改。然而它沒有做它的事情。爲什麼?
'setAttribute()'是一個方法調用。 DOM對象上的方法仍然可以在凍結後改變事物。凍結影響純屬性賦值,而不是調用方法和(根據MDN)不是實際上具有getter和setter的屬性。另外,'.freeze()'實際上是爲javascript對象設計的,而不是DOM對象。 – jfriend00 2014-10-17 05:00:14