重新定义Node.js中的“对象”关键字

时间:2014-10-21 00:29:06

标签: javascript node.js keyword

在Node.js中重新定义特殊词(技术上预定义的全局变量)如Object有多糟糕?我有一个mongoose模型,我想称之为“对象”,因为它代表了一个对象,mongoose的约定似乎是模型是大写的。但是,我注意到Object是JavaScript中的关键字。我尝试使用Node本身来查看Object关键字的确切内容,具体取决于JavaScript源代码所说的内容。但是,当我在Node shell中运行console.log(Object.toString());时,它会返回function Object() { [native code] };。其他特殊单词(如BooleanString)在记录时会产生类似的输出。我会进入Node源代码,但遗憾的是我没有学习C或C ++的特权。

因此,重新定义JavaScript关键字(例如ObjectArrayNumber的后果会产生什么影响?我主要在Node的上下文中询问。 js,但有关JavaScript的信息肯定会有所帮助。我可能不会像原来那样使用这些变量,我认为它们是每种类型的包装对象(数组为Array,数字为Number等),但是有没有将它们用于完全不同目的的其他意外后果是什么?

1 个答案:

答案 0 :(得分:1)

不要这样做。事情会如何爆炸的简单例子:

@jack:~$ node
> Object = ''
''
> var c = {}
undefined
> c

util.js:222
  var keys = Object.keys(value);
                    ^
TypeError: Object  has no method 'keys'
    at formatValue (util.js:222:21)
    at Object.inspect (util.js:140:10)
    at REPLServer.self.writer (repl.js:177:19)
    at finish (repl.js:291:38)
    at repl.js:251:15
    at REPLServer.self.eval (repl.js:122:7)
    at Interface.<anonymous> (repl.js:239:12)
    at Interface.EventEmitter.emit (events.js:95:17)
    at Interface._onLine (readline.js:202:10)
    at Interface._line (readline.js:531:8)

如果你在脚本中执行此操作,也会发生同样的事情。您应该为这些对象的版本添加前缀(或名称空间)。