Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Node.js中的模块等原型?_Javascript_Node.js - Fatal编程技术网

Javascript 如何使用Node.js中的模块等原型?

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模块是类似的,我曾经遇到过同样的问

我想用原型扩展标准对象,比如字符串。例如,为数组添加diff函数。Node.js中组织代码的好方法是使用模块,但如何使用prototype实现这一点

范例

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以来,他们一直在远离它

一旦另一个库扩展了本机对象(映射、图形库有时会根据过去的经验进行扩展),您就会得到不同的代码,期望从这些添加中获得不同的行为

简而言之,创建另一个包含这些函数的“实用程序”类,并包含和使用这些函数