您可以在JavaScript中扩展原生对象。例如,sugar.js 扩展了数组、字符串和函数等内容。本地对象扩展非常有用,但固有地破坏了封装 - 即如果有人使用相同的扩展名称(覆盖另一个扩展),则会出现问题。
如果您可以为特定范围扩展对象,那将是非常好的。例如,在Node.js中能够执行以下操作:
如果您可以为特定范围扩展对象,那将是非常好的。例如,在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
- Node.js
- C++扩展到Node.js