gpt4 book ai didi

javascript - 在 node.js 模块中将原型(prototype)函数添加到 JSON

转载 作者:搜寻专家 更新时间:2023-11-01 00:45:21 24 4
gpt4 key购买 nike

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

我希望能够在我的代码中的任何位置调用 JSON.prune,它将输出字符串化对象的 trim 版本。

看起来这是使用原型(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');

获得扩展功能?那还能行吗?

是否有更好(更标准)的方法来做到这一点?

最佳答案

如果这是应用程序代码而不是您正在编写的库或模块,您可以按照自己喜欢的方式进行。不过,就“最佳实践”而言,通常可以避免修改现有构造函数的原型(prototype)。最简单的方法是将其改编为独立函数,如 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;

```

关于javascript - 在 node.js 模块中将原型(prototype)函数添加到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20314521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com