javascript引擎中的Bug?Array.prototype.sort with Function.call进行回调
我不确定这是否是一个错误。下面的场景在Chrome和Firefox中都失败了,所以我不能完全确定。如果这是我的错,有人能告诉我为什么这不起作用吗 下面是一个简化的bug示例:javascript引擎中的Bug?Array.prototype.sort with Function.call进行回调,javascript,Javascript,我不确定这是否是一个错误。下面的场景在Chrome和Firefox中都失败了,所以我不能完全确定。如果这是我的错,有人能告诉我为什么这不起作用吗 下面是一个简化的bug示例: var bObj = { list: [4,5,23,5,90,1], sort: function() { var cb = function(a, b) { return a - b; }, that = this; this.list.sort(function(a, b)
var bObj = {
list: [4,5,23,5,90,1],
sort: function() {
var cb = function(a, b) {
return a - b;
}, that = this;
this.list.sort(function(a, b) {cb.call(that, a, b);});
}
};
bObj.sort();
console.log(bObj.list);
var wObj = {
list: [4,5,23,5,90,1],
sort: function() {
var cb = function(a, b) {
return a - b;
};
this.list.sort(cb);
}
};
wObj.sort();
console.log(wObj.list);
这将产生:
[4, 5, 23, 5, 90, 1]
[1, 4, 5, 5, 23, 90]
对于Function.call,我需要维护上下文,因为我在回调中引用了对象属性。我最终通过一个简单的结束来解决这个问题。我仍然想知道为什么失败了
谢谢您的排序功能没有返回任何内容:
sort: function() {
var cb = function(a, b) {
return a - b;
};
var that = this;
this.list.sort(function(a, b) {
cb.call(that, a, b); // <--- here's your bug in the javascript engine.
});
}
即时-1。不要乞求bug,尤其是标题中经过良好测试的代码。请重写它,只说明观察结果。你只是忘记了报税表。错误在用户身上,和往常一样…谢谢,没有傲慢。我想知道为什么这不起作用。根据经验,这几乎是不可能的?除非您使用的是该语言的alpha/beta版本,否则该语言本身存在缺陷。投诉是关于您询问的方式。您暗示这很可能是JS中的错误,而不是您的代码。如果你认为这是你的错,为什么要这么说呢?bindthis在这种情况下没有用吗?OP希望能够访问bObj的作用域,就像在回调函数中一样。
sort: function() {
var cb = function(a, b) {
return a - b;
};
this.list.sort(cb.bind(this));
}