2017-08-11 48 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)将防止删除任何配置属性。 –