Javascript 从node.js模块中向JSON添加原型函数
我正在查看这个javascript库: 它是为客户端浏览器设计的,我希望将其移植到node.js 我希望能够在代码中的任何地方调用JSON.prune,它将输出一个经过删减的stringized对象版本 看起来这是使用prototype的概念将此函数添加到JSON上的。在node.js模块中执行此操作的最佳实践是什么 我想我会制作一些模块,上面会说:Javascript 从node.js模块中向JSON添加原型函数,javascript,node.js,Javascript,Node.js,我正在查看这个javascript库: 它是为客户端浏览器设计的,我希望将其移植到node.js 我希望能够在代码中的任何地方调用JSON.prune,它将输出一个经过删减的stringized对象版本 看起来这是使用prototype的概念将此函数添加到JSON上的。在node.js模块中执行此操作的最佳实践是什么 我想我会制作一些模块,上面会说: file prune.js ==== JSON.prototype.prune = function(){/*bla bla bla*/}; 但
file prune.js
====
JSON.prototype.prune = function(){/*bla bla bla*/};
但这不是只有在模块内部才可见吗
我需要这样说吗
file json2.js
=====
exports = JSON;
exports.prune = function(){/*bla bla bla*/
然后在我想访问的方法中,只需说
var JSON = require('json2.js');
要获得扩展功能?这样行吗
有更好(更标准)的方法吗?如果这是应用程序代码,而不是您正在编写的库或模块,您可以用任何方式来完成。不过,就“最佳实践”而言,通常避免修改现有构造函数的原型。最简单的方法是将它改编成一个独立的函数,如
pruneJSON
,而根本不修改JSON
对象
编辑:
对于这个特定的库,您可以修改末尾的代码(从第114行开始),如下所示:
```
```
pruneJSON = function (value, depthDecr, arrayMaxLength) {
if (typeof depthDecr == "object") {
var options = depthDecr;
depthDecr = options.depthDecr;
arrayMaxLength = options.arrayMaxLength;
iterator = options.iterator || forEachEnumerableOwnProperty;
if (options.allProperties) iterator = forEachProperty;
else if (options.inheritedProperties) iterator = forEachEnumerableProperty
} else {
iterator = forEachEnumerableOwnProperty;
}
seen = [];
depthDecr = depthDecr || DEFAULT_MAX_DEPTH;
arrayMaxLength = arrayMaxLength || DEFAULT_ARRAY_MAX_LENGTH;
return str('', {'': value}, depthDecr, arrayMaxLength);
};
pruneJSON.log = function() {
console.log.apply(console, Array.prototype.slice.call(arguments).map(function(v){return JSON.parse(pruneJSON(v))}));
}
pruneJSON.forEachProperty = forEachProperty;
module.exports = pruneJSON;