2016-07-10 3 views
1

Я просто хочу знать, есть ли стандартный способ предотвратить добавление методов/свойств к объекту JavaScript?Предотвращение добавления свойств объекта JavaScript

Как программист на языке C++, похоже, что у вас может быть много головных болей, пытающихся отладить код JavaScript, когда он позволяет добавлять свойства к объекту «на лету», особенно в больших базовых кодах.

+0

Нет, нет. –

+0

Ну, это JS для ya :-) – 1sloc

+0

Если вы действительно просто пытаетесь предотвратить или обнаружить случайные проблемы с типизацией с неправильным назначением имени свойства (как предлагает один из ваших комментариев) на всех ваших объектах, тогда Javascript действительно не поддерживайте это и, как правило, не согласуетесь с тем, как вы обычно используете Javascript. Как было сказано в другом месте, вы можете использовать 'Object.freeze()', 'Object.seal()', но это, скорее всего, мешает нормальной работе объекта. Если вы умираете за эту функцию, возможно, вы предпочтете использовать что-то вроде TypeScript. – jfriend00

ответ

3

Существует функция сортировки, функция ES5.1 Object.freeze может предотвратить добавление новых свойств, а также предотвращать изменение существующих свойств.

Рабочий пример:

var o = { 
 
    a: 123 
 
}; 
 
o.b = 456; 
 

 
// Freeze the object. 
 
Object.freeze(o); 
 

 
// Log the object. 
 
console.log(o); 
 

 
// These do nothing, properties do not change and are not added. 
 
o.b = 0; 
 
o.c = 789; 
 

 
// Log the object. 
 
console.log(o);

Это, как говорится, JavaScript супер динамический язык, поэтому делает это широко может рассматриваться антишаблоном.

Если замораживание является слишком ограничивающим, другие варианты включают Object.preventExtensions и Object.seal, в зависимости от того, что вы хотите предотвратить.

Альтернативно ES6 Proxy objects может предложить больше контроля над тем, какие свойства могут быть добавлены или изменены.

+0

Ах, извините, я мог бы объяснить мой вопрос немного странно. Я думаю, что смотреть на другие ответы, что мне нужно, на самом деле невозможно. Честно говоря, я не думаю, что проблема двусмысленности кода, о которой я говорю, - это большая сделка, по крайней мере, для меня в личных проектах, но я вижу, что есть довольно ужасно, чтобы найти ошибки в больших кодовых базах, люди говорят что-то вроде: car.age = 3; car.Age = 4; log (car.age) – George

+0

Вам также может понравиться object.seal() и/или object.preventExtensions() – JonSG

+0

@JonSG Хороший звонок, я забыл о них. –

0

Не совсем. Вероятно, есть способы настроить объекты, которые вы не хотите просто присоединять к новым свойствам, но ничего практичного или стандартизованного. Будучи в первую очередь разработчиком javascript, я не считаю, что это проблема. Я считаю, что машинописный текст делает что-то для этого с интерфейсами, где он выдает предупреждение, если вы начнете добавлять свойства, которых он не ожидает. Многие разработчики javascript не являются поклонниками этого, но вы можете попробовать его попробовать https://www.typescriptlang.org/docs/tutorial.html

Смежные вопросы