gpt4 book ai didi

javascript - 绑定(bind)点击失去了我的类(class)的上下文。 JS

转载 作者:行者123 更新时间:2023-11-30 23:45:53 25 4
gpt4 key购买 nike

我有这个问题,我可能理解,但不知道如何处理,如果有办法的话。

我有一个简化的类:

function DrawingTable(canvas_id){
this.canvas_id = canvas_id;
bind_events()

function bind_events(){
$(get_canvas()).click(function(e){
var canvas = get_canvas() //works
do_something_in_the_instance_who_called_click()
}

function get_canvas(){return document.getElementById(canvas_id)}

function do_something_in_the_instance_who_called_click(){
alert(this.canvas_id) //fail!
}

}

因为当调用click()时,它看起来this不再位于实例内部,但我需要从那里更改属性。鉴于可能有多个实例,有没有办法?

我真的不知道 get_canvas() 是如何工作的:)

我正在使用 jQuery,但可能不相关

最佳答案

发生这种情况是因为您在没有任何对象上下文的情况下调用该函数,但您可以存储this值:

function DrawingTable(canvas_id){
var instance = this; // <-- store `this` value

this.canvas_id = canvas_id;
bind_events()

function bind_events(){
$(get_canvas()).click(function(e){
// Note also that here the `this` value will point to the
// canvas elemenet, `instance` should be used also

var canvas = get_canvas();
do_something_in_the_instance_who_called_click();
}

function get_canvas(){return document.getElementById(canvas_id)}

function do_something_in_the_instance_who_called_click(){
alert(instance.canvas_id); // <-- use stored `this` value
}

}

当您进行函数调用时,this 值会隐式设置,例如:

obj.method();

如果您在没有任何基础对象的情况下进行函数调用,则this值将指向obj,例如:

myFunction();

myFunction 中的 this 值将指向全局对象。

关于javascript - 绑定(bind)点击失去了我的类(class)的上下文。 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3045953/

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