扩展 JavaScript 库的最佳方式?
Best Way to Extend a JavaScript Library?
我在使用 Python 工作了很长时间后回到 JavaScript,所以我忘记了一些 Javascript 最佳实践。
我想使用预定义的数据结构,例如 bucket-js 提供的数据结构。但是,我注意到 bucket-js 没有为其对象提供很多 toString() 方法;所以我想提供我自己的方法。
扩展这种类型的库对象的最佳方法是什么,这样扩展在我的整个项目中都可用,但不涉及对库源代码进行更改?
浏览器
如果您的目标环境是浏览器,那么只需将扩展库对象的代码放在上方其余代码。
示例:
<script src="bucket-js"></script>
<script>
buckets.Set.prototype.toString = function() {
//...
}
// Rest of your code
</script>
Node.js
如果您的目标是 Node.js,或者浏览器通过类似 Browserify 的东西与相同的 module-based 组织一起工作,一种方法是创建您自己的修补模块来修补库对象,然后将其传回。然后你需要这个模块而不是普通的模块。
更多信息:Monkey Patching in Node.js。
示例:
myPatchedBucketJS/index.js
var bucket = require('bucket-js');
buckets.Set.prototype.toString = function() {
//...
}
module.exports = bucket;
main.js
var bucket = require('myPatchedBucketJS');
我在使用 Python 工作了很长时间后回到 JavaScript,所以我忘记了一些 Javascript 最佳实践。
我想使用预定义的数据结构,例如 bucket-js 提供的数据结构。但是,我注意到 bucket-js 没有为其对象提供很多 toString() 方法;所以我想提供我自己的方法。
扩展这种类型的库对象的最佳方法是什么,这样扩展在我的整个项目中都可用,但不涉及对库源代码进行更改?
浏览器
如果您的目标环境是浏览器,那么只需将扩展库对象的代码放在上方其余代码。
示例:
<script src="bucket-js"></script>
<script>
buckets.Set.prototype.toString = function() {
//...
}
// Rest of your code
</script>
Node.js
如果您的目标是 Node.js,或者浏览器通过类似 Browserify 的东西与相同的 module-based 组织一起工作,一种方法是创建您自己的修补模块来修补库对象,然后将其传回。然后你需要这个模块而不是普通的模块。
更多信息:Monkey Patching in Node.js。
示例:
myPatchedBucketJS/index.js
var bucket = require('bucket-js');
buckets.Set.prototype.toString = function() {
//...
}
module.exports = bucket;
main.js
var bucket = require('myPatchedBucketJS');