Javascript 如何在node.js中定义泛型方法?
在node.js中,我很难处理类/对象和“this”关键字。例如: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]);
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))替换第一个代码片段中的第三行这不是一个纯JavaScript问题吗?建议重新标记--node.js
this.leq = leq ? leq : function(x,y) {return x<=y;};
this.arr=arr.slice().sort(this.geq);