我认为的另一个主要好处是,它可以防止对象的私有属性污染公共命名空间。
假设您创建并发布了一个名为Cosmos 的强大库。用户启动 Node 解释器并通过调用构造函数创建它的新实例:
var Cosmos = require('Cosmos');
var cosmos = new Cosmos('my empire');
现在用户只需键入cosmos 并按回车键即可查看它支持的公共 API。您希望用户看到两者中的哪一个?
{ name: 'my empire',
grow: [Function: grow],
addStar: [Function: addStar],
beautify: [Function: beautify],
implode: [Function: implode],
destroy: [Function: destroy] }
或
{ _age: 25000,
_size: 35000,
_destroyed: false,
name: 'my empire',
_numStars: 200,
_init: [Function: _init],
grow: [Function: grow],
_grow: [Function: _grow],
addStar: [Function: addStar],
_checkStatus: [Function: _checkStatus],
beautify: [Function: beautify],
implode: [Function: implode],
destroy: [Function: destroy] }