由于ECMA-262规范Javascript已经获得了Object.freeze()方法,该方法允许添加或删除其属性无法更改的对象.
var obj = {'a':1, 'b:2'};
Object.freeze(obj);
Object.isFrozen(obj); // returns true
obj.a = 10; // new assignment has no affect
obj.a; // returns 1
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
我想知道,freeze()是否也适用于数组.
var arr = [1, 2];
Object.freeze(arr);
Object.isFrozen(arr); // returns true
arr[0] = 10;
arr; // returns [10, 2] ... ouch!
Run Code Online (Sandbox Code Playgroud)
也许我错了,但我的印象是,Array继承自Object.
typeof obj // "object"
typeof arr // "object"
Run Code Online (Sandbox Code Playgroud)
任何想法,指针,启示都将受到高度赞赏.
我想用一个原型函数扩展Boolean对象,该函数反转它的当前值.到现在为止,我一直在做这样的事情:
var bool = true;
bool = !bool;
console.log(bool); // false
Run Code Online (Sandbox Code Playgroud)
我尝试扩展布尔对象的尝试并不富有成效.那是我得到了多远:
Boolean.prototype.invert = function() {
return !this.valueOf();
}
var bool = true;
bool = bool.invert();
console.log(bool); // false
Run Code Online (Sandbox Code Playgroud)
关闭,但不够近.我正在寻找这些方面的解决方案:
var bool = true;
bool.invert();
console.log(bool); // false
Run Code Online (Sandbox Code Playgroud)
是的,我知道,扩展内置对象通常被认为是一个坏主意.请让我们将讨论保存一天.