Javascript 从node.js模块中向JSON添加原型函数

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*/}; 但

我正在查看这个javascript库: 它是为客户端浏览器设计的,我希望将其移植到node.js

我希望能够在代码中的任何地方调用JSON.prune,它将输出一个经过删减的stringized对象版本

看起来这是使用prototype的概念将此函数添加到JSON上的。在node.js模块中执行此操作的最佳实践是什么

我想我会制作一些模块,上面会说:

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;