Node.js 在io.js模块中使用Object.defineProperty定义常量有意义吗?

Node.js 在io.js模块中使用Object.defineProperty定义常量有意义吗?,node.js,io.js,Node.js,Io.js,例如,dns.js文件: exports.EOF = 'EOF'; exports.FILE = 'EFILE'; exports.NOMEM = 'ENOMEM'; 这些可以被覆盖,例如 var dns = require('dns'); dns.EOF = 3; 那么: Object.defineProperty(module.exports, 'EOF', { value: 'EOF', enumerable: true}); Object.defineProperty(modu

例如,dns.js文件:

exports.EOF = 'EOF';
exports.FILE = 'EFILE';
exports.NOMEM = 'ENOMEM';
这些可以被覆盖,例如

var dns = require('dns');
dns.EOF = 3;
那么:

Object.defineProperty(module.exports, 'EOF',
  { value: 'EOF', enumerable: true});

Object.defineProperty(module.exports, 'EFILE',
  { value: 'EFILE', enumerable: true});
等等。在这种情况下,则:

 'use strict';
 var dns = require('./dns');
 dns.EOF = 3;

TypeError: Cannot assign to read only property 'EOF' of #<Object>

对我来说,这似乎是基于观点的。这取决于你对用户的信任程度?至少对我来说,这看起来像是过度保护。很好。我想你可以简单地在你的模块上使用Object.freeze使它们完全不可变;exports.EOF=EOF;?