gpt4 book ai didi

Javascript:使用原型(prototype)描述符添加方法

转载 作者:行者123 更新时间:2023-11-29 20:23:05 25 4
gpt4 key购买 nike

代码:

Sorter.prototype.init_bubblesort = function(){
console.log(this.rect_array);
this.end = this.rect_array.length;
this.bubblesort();
}

Sorter.prototype.init = function(array,sort_type){
this.rect_array = array;
this.init_bubblesort();
}

上面的代码按预期工作,但是当我将 init 函数更改为:

Sorter.prototype.init = function(array,sort_type){
var sort_types = {'bubblesort':this.init_bubblesort,
'quicksort':this.init_quicksort,
'liamsort':this.init_liamsort};
this.rect_array = array;
sort_types[sort_type]();
}

init_bubblesort 函数导致错误,指出 this.rect_array 未定义。我正在努力思考为什么 init_bubblesort 不再能够访问其实例的变量。

最佳答案

您需要使用 call指定隐式参数 (this)。

Sorter.prototype.init = function(array,sort_type){
var sort_types = {'bubblesort':this.init_bubblesort,
'quicksort':this.init_quicksort,
'liamsort':this.init_liamsort};
this.rect_array = array;
sort_types[sort_type].call(this);
}

否则,不存在与 init_bubblesort 方法关联的对象。

对于setTimeout,做:;

var self = this;
setTimeout(function(){sort_types[sort_type].call(self);}, 1000);

在回调中,this 将引用窗口,因此我们创建一个单独的变量 (self),它将被关闭。

关于Javascript:使用原型(prototype)描述符添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2940073/

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