您可以在 javascript 中扩展本机对象。例如,sugar.js扩展了 Array、String 和 Function 等。本机对象扩展非常有用,但本质上会破坏封装——即如果有人使用相同的扩展名(覆盖另一个扩展),事情就会中断。
如果您可以为特定范围扩展对象,那将是非常好的。例如,能够在 node.js 中做这样的事情:
// myExtension1.js
Object.prototype.x = 5
exports.speak = function() {
var six = ({}.x+1)
console.log("6 equals: "+six)
}
// myExtension2.js
Object.prototype.x = 20
exports.speak = function() {
var twenty1 = ({}.x+1)
console.log("21 equals: "+twenty1)
}
并正确完成这项工作:
// test.js
var one = require('myExtension1')
var two = require('myExtension2')
one.speak(); // 6 equals: 6
two.speak(); // 21 equals: 21
当然,实际上,这将打印出“6 等于:21”作为第一个。
有没有办法通过任何机制在可能的情况下做一些事情?我感兴趣的机制包括:
- 纯 JavaScript
- 节点.js
- Node.js 的 C++ 扩展