2014-11-17 50 views
1

我想這將永遠是不確定的屬性:力財產永遠是不確定的

var foo = {bar:undefined} 

如果後來有人試圖更改屬性欄,然後還應該導致不確定的。

foo.bar = 'someValue'// 
foo.bar//this time this should result in undefined. 

我的意思是如何設置一個不可改變的屬性。

+2

你可以創建一個拒絕改變屬性值的setter。或者你可以創建一個總是返回undefined的getter。或者,您可以使用Object.defineProperty()創建一個初始值不可寫的屬性。 – jfriend00

+1

最簡單的你可以做的是'var foo = {}; Object.defineProperty(foo,'bar',{});'。這就是你所需要的,因爲所有其他屬性描述符('enumerable'等)默認爲false。 – dfsq

回答

1

確定的基礎上,從@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

請注意,您仍然可以刪除並重新設置該屬性。 (雖然你不能簡單地覆蓋它。)

1

目前你可以這樣做:

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

+0

我試過這段代碼。出於幾個原因,它不像您擁有它那樣運行。 – jfriend00

+0

@feeela我修改了它,我只是測試它,發現有一些錯誤。 – somethinghere

+0

@feeela你編輯不正確。 'undefined!=='undefined''。 – dfsq