gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:22:44 25 4
gpt4 key购买 nike

在 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)

但是,如果我像这样删除 .sort 片段:

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

我没有问题:

 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 ...

那么:我如何在我的对象中创建一个方法(如 geq),当我需要时,该方法可以访问同一对象中的另一个方法(如 leq)访问第一种方法,例如排序函数?

最佳答案

this.leq = leq ? leq : function(x,y) {return x<=y;};

只会将leq函数分配给Set的当前实例

this.arr=arr.slice().sort(this.geq);

不会工作,因为将函数引用作为 instance.methodName 不会将该方法绑定(bind)到指定的实例

这可以使用 Function.bind 来解决.

关于javascript - 如何在 node.js 中定义泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913163/

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