JavaScript对象私有参数

JavaScript对象私有参数,javascript,private,javascript-objects,Javascript,Private,Javascript Objects,如何创建这样的对象。 设置名称后,对象应具有名称,因此无法修改 var movies = { genre:"Horror"; } movies.genre= "Pop" I dont want to change my genre value 您可以尝试使用with descriptor选项和writable属性: var o = {}; // Creates a new object Object.defineProperty(o, "a", { value : 37,

如何创建这样的对象。
设置名称后,对象应具有名称,因此无法修改

var movies = {
    genre:"Horror";
    }
movies.genre= "Pop" I dont want to change my genre value
您可以尝试使用with descriptor选项和writable属性:

var o = {}; // Creates a new object

Object.defineProperty(o, "a", { value : 37,
                                writable : false });

console.log(o.a); // logs 37
o.a = 25; // No error thrown (it would throw in strict mode, even if the value had been the same)
console.log(o.a); // logs 37. The assignment didn't work.

实际上,您可以更改对象的属性

我在研究后发现了这个,根据你的需要修改它

var data = { };

Object.defineProperty(data, 'secret', {
value: 42,
writable : false,
enumerable : true,
configurable : false
});
从客户的回答来看:

这样,我们在数据中创建了一个值为
42
的属性机密,它既不能修改也不能删除

这里需要注意的是,genius(就像你所说的)也能够发现这段代码并修改它,如果他愿意的话,再次能够更改内容。您无法以这种方式创建安全的前端JavaScript。代码将始终以纯文本形式提供给每个人


来源:

以下方法应适用于所有浏览器,包括旧浏览器

您可以使用闭包和立即调用函数(IIFE)来实现私有属性。下面是一个示例代码。这里,初始值作为参数传递给IIFE。IIFE使用init值初始化私有属性,然后返回一个包含私有属性的访问器函数的对象。因为返回的对象没有直接的私有属性,所以不能修改它,但是可以通过闭包访问它

var objWithPrivateProp = (function(initValue){
   var privateProp = initValue;
   return {
      getPrivateProp: function () {
          return privateProp;
      }
   };
})("Horror");

请记住,此技术仅适用于ECMAScript 5浏览器。如果您需要支持IE8,它将不起作用。