2017-08-11 65 views
0

我有一些全局對象CD它已設置的屬性如下:如何允許添加屬性的對象,但停止修改屬性組對對象

window.cd = { 
    config:{ 
    title:"..." 
    } 
    a:func..., 
    b:56, 
    c:.. 
} 

我想用戶允許將屬性添加到cdcd.config但要密封的屬性cd.a, cd.b, cd.config.title(不允許修改)。

用戶應該無法刪除window.cd或這些特性以及(其它屬性,他可以刪除或修改)。

我試着用以下:

window.cd.a.seal(); 
window.cd.b.seal(); 
window.cd.config.title.seal(); 

但它拋出以下錯誤:

window.cd.config.title.seal is not a function

+0

'Object.seal'是一個函數HTTPS ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal,'String.seal'不是('window.cd.config.title'是as特林) –

+0

那麼如何實現我的要求我想停止用戶修改標題。 –

+2

你必須封閉一個物體,而不是它的單個屬性。此外,密封不會阻止財產價值的變化,它只會阻止添加或更改屬性。也許你想標記他們不可寫https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty –

回答

0

快速樣品製作標題不可寫

"use strict"; 
// Use strict mode or assignments to nonwritable properties silently fail 

window.cd = { 
    config:{ 
    title:'mytitle' 
    }, 
    a:12, 
    b:56 
} 

console.log(cd.config.title) 
Object.defineProperty(cd.config,'title',{writable:false}); 
cd.config.title="Test"; // Fails, throws exception if Strict mode 
console.log(cd.config.title) 
+0

以及如何防止刪除cd .. –

+0

Object.seal(cd.config)將防止刪除任何配置屬性。 –