Javascript 如何使用Node.js中的模块等原型?
我想用原型扩展标准对象,比如字符串。例如,为数组添加diff函数。Node.js中组织代码的好方法是使用模块,但如何使用prototype实现这一点 范例Javascript 如何使用Node.js中的模块等原型?,javascript,node.js,Javascript,Node.js,我想用原型扩展标准对象,比如字符串。例如,为数组添加diff函数。Node.js中组织代码的好方法是使用模块,但如何使用prototype实现这一点 范例 Array.prototype.diff = function (a) { return this.filter(function (i) { return !(a.indexOf(i) > -1); }); }; 我不能代表nodejs说话,但我想Mozilla的JS模块是类似的,我曾经遇到过同样的问
Array.prototype.diff = function (a) {
return this.filter(function (i) {
return !(a.indexOf(i) > -1);
});
};
我不能代表nodejs说话,但我想Mozilla的JS模块是类似的,我曾经遇到过同样的问题 问题是,每个JS模块(可能还有nodejs模块)都在自己的JavaScript上下文中运行,因此来自不同模块的数组构造函数(和原型)并不相同。它们是完全不同的对象 我可能会有一个带有辅助函数的模块,该函数将相应的更改添加到给定对象。这意味着,您必须从要使用扩展阵列原型的每个模块中调用helper函数 阵列辅助模块:
函数扩展数组(arrayConstructor)
{
arrayConstructor.prototype.diff=函数(a){
返回此.filter(函数(i){
返回!(a.indexOf(i)>-1);
});
};
}
exports.extendArray=extendArray;
使用阵列的模块:
var ArrayHelperModule=require(“ArrayHelperModule”);
//扩展此模块的数组
可扩展阵列(阵列);
//使用它
var diff=[1,2].diff([1]);
p、 希望代码是正确的这样。。。我只是很快地在这里输入了它这对我很有效
Array.prototype.diff = function( compareArray ) {
return this.filter(
function( arrayItem ){
return this.indexOf( arrayItem ) == -1;
},
compareArray
);
};
我想你也可以在原型链中添加一个级别,但这需要更多的复杂性,而且似乎还没有那么有用
另外,我不知道你打算如何使用过滤功能
var a = [1,2,3,4];
var b = [3,4,5,6];
console.log( a.diff( b ) );
// Outputs:
[ 1, 2 ]
**由于我的级别较低,我无法发表评论:(因此我正在写一份答复。) 扩展本机对象是一种非常糟糕的做法,请不惜一切代价避免这种做法。 Mootools采用了这种方法,只需谷歌搜索“Mootools冲突”,就可以看到不断出现的问题……尽管自版本1.2.4以来,他们一直在远离它 一旦另一个库扩展了本机对象(映射、图形库有时会根据过去的经验进行扩展),您就会得到不同的代码,期望从这些添加中获得不同的行为 简而言之,创建另一个包含这些函数的“实用程序”类,并包含和使用这些函数