Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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_This Keyword - Fatal编程技术网

Javascript 如何在node.js中定义泛型方法?

Javascript 如何在node.js中定义泛型方法?,javascript,node.js,this-keyword,Javascript,Node.js,This Keyword,在node.js中,我很难处理类/对象和“this”关键字。例如: function Set(arr,leq) { this.leq = leq ? leq : function(x,y) {return x<=y;}; this.arr=arr.slice().sort(this.geq); } Set.prototype.geq=function(x,y) { return this.leq(y,x);} var myset = new Set([1,5,3,2,7,9]);

在node.js中,我很难处理类/对象和“this”关键字。例如:

function Set(arr,leq) {
  this.leq = leq ? leq : function(x,y) {return x<=y;};
  this.arr=arr.slice().sort(this.geq);
}
Set.prototype.geq=function(x,y) { return this.leq(y,x);}

var myset = new Set([1,5,3,2,7,9]);


TypeError: Object #<Object> has no method 'leq'
at [object Context]:1:47
at Array.sort (native)
at new Set ([object Context]:3:22)
at [object Context]:1:13
at Interface.<anonymous> (repl.js:171:22)
at Interface.emit (events.js:64:17)
at Interface._onLine (readline.js:153:10)
at Interface._line (readline.js:408:8)
at Interface._ttyWrite (readline.js:585:14)
at ReadStream.<anonymous> (readline.js:73:12)
我在以下方面没有问题:

 var myset = new Set([1,5,3,2,7,9]);
 myset.geq(3,4)
 false
但仍然:

 myset.arr.sort(myset.geq)

 TypeError: Object #<Object> has no method 'leq'
 at ...
myset.arr.sort(myset.geq)
TypeError:对象#没有方法“leq”
在
因此:当我需要访问同一对象中的第一个方法(如
sort
函数)时,如何在对象中创建一个方法(如
geq
),该方法可以访问同一对象中的另一个方法(如
leq

this.leq = leq ? leq : function(x,y) {return x<=y;};
将函数引用作为
instance.methodName
传递不会将该方法绑定到指定实例,因此将不起作用


对于第2点,可以使用。

+1解决这个问题,但我对你的第1点感到困惑。可以对实例调用原型上的方法,就像它们在实例本身上一样。如果方法在实例上,OP也会有同样的问题。还是我误解了你的意思?谢谢,阿尔尼塔克。我不知道
bind
方法。对于可能感兴趣的人,这里有一个可行的解决方案,即用
this.arr=arr.slice().sort(this.geq.bind(this))替换第一个代码片段中的第三行this.leq = leq ? leq : function(x,y) {return x<=y;};
this.arr=arr.slice().sort(this.geq);