我想這將永遠是不確定的屬性:力財產永遠是不確定的
var foo = {bar:undefined}
如果後來有人試圖更改屬性欄,然後還應該導致不確定的。
foo.bar = 'someValue'//
foo.bar//this time this should result in undefined.
我的意思是如何設置一個不可改變的屬性。
我想這將永遠是不確定的屬性:力財產永遠是不確定的
var foo = {bar:undefined}
如果後來有人試圖更改屬性欄,然後還應該導致不確定的。
foo.bar = 'someValue'//
foo.bar//this time this should result in undefined.
我的意思是如何設置一個不可改變的屬性。
確定的基礎上,從@somethinghere提示(誰是再次打破了他/她自己的答案...)這裏是一個工作的例子,是設置了一個對象的成員,默認爲undefined
,不可寫:
var foo = {}
Object.defineProperty(foo, 'bar', {
enumerable: false,
configurable: false,
writable: false
});
foo.bar = 'abcdefg';
console.log(foo.bar); // returns undefined
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
請注意,您仍然可以刪除並重新設置該屬性。 (雖然你不能簡單地覆蓋它。)
目前你可以這樣做:
var foo = {}
Object.defineProperty(foo, 'bar', {
enumerable: false,
configurable: false,
writable: false,
value: undefined
});
如一些人所指出的那樣,undefined
將不等於"undefined"
,一個顯然是一個字符串。但是,爲了清楚起見,我添加了它,因爲省略value
屬性確實失去了使用defineProperty使它們不可配置的要點。一旦配置完成,其結束,所以它有用,有價值。如果您希望它返回undefined
,請忽略value
。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
我試過這段代碼。出於幾個原因,它不像您擁有它那樣運行。 – jfriend00
@feeela我修改了它,我只是測試它,發現有一些錯誤。 – somethinghere
@feeela你編輯不正確。 'undefined!=='undefined''。 – dfsq
你可以創建一個拒絕改變屬性值的setter。或者你可以創建一個總是返回undefined的getter。或者,您可以使用Object.defineProperty()創建一個初始值不可寫的屬性。 – jfriend00
最簡單的你可以做的是'var foo = {}; Object.defineProperty(foo,'bar',{});'。這就是你所需要的,因爲所有其他屬性描述符('enumerable'等)默認爲false。 – dfsq