Avoid adding methods and properties to custom object

本秂侑毒 提交于 2019-12-12 22:15:40

问题


I'm using a base custom object extended with prototype

function Person() {}

Person.prototype.Name      = "";
Person.prototype.Lastname  = "";

var NewPerson= new Person();

NewPerson.Name      = "Nancy";
NewPerson.Lastname  = "Drew";   //<--- right way

NewPerson.lastname  = "Drew";   //<--- wrong property

I need to avoid to add new properties and methods in a defined object because it would generate silent errors and bugs.

I know that javascript has a terrible way to manage classes/objects, but there's a way to protect it?

I found freeze and seal but those prevent me from changing the values.


回答1:


I found freeze and seal but those prevent me from changing the values.

Values can be changed with Object.seal

The Object.seal() method seals an object, preventing new properties from being added to it and marking all existing properties as non-configurable. Values of present properties can still be changed as long as they are writable.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal

http://plnkr.co/edit/Wut7lsOxdFuz2VzsFzCM?p=preview

function Person(){
  this.name = "";
  this.id = "";
  Object.seal(this);
}

var p1 = new Person();

p1.name = "Mike";
p1.id = "A1";
p1.age = 32;

console.log(p1); //Person {name: "Mike", id: "A1"}

If you desire to actually freeze the prototype of the object while leaving other parts writable then you can try this approach

function Person(){
  this.name = "";
  this.id = "";
  Object.seal(this);
}

//this will add to Person
Person.prototype.test = function(){
  alert("hi");
}

Object.freeze(Person.prototype);

//this won't
Person.prototype.test2 = function(){
  alert("hi");
}

var p1 = new Person();


p1.name = "Mike";
p1.id = "A1";
p1.age = 32;

console.log(p1); //Person {name: "Mike", id: "A1"} test will be on the proto


来源:https://stackoverflow.com/questions/30709191/avoid-adding-methods-and-properties-to-custom-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!