gpt4 book ai didi

按下按钮时,Javascript简单类作用域会发生变化

转载 作者:行者123 更新时间:2023-12-02 17:35:03 25 4
gpt4 key购买 nike

我确信这是基本问题之一。我正在创建一个自定义 Javascript 类,并在上面使用 Jquery 来做一些事情。检查文档是否准备好后,我调用 init() 并添加事件处理程序。但是,当我单击按钮时,我进入“turnLightOn”函数,但是当它尝试调用此类的另一个函数时,其范围已更改为“按钮”,因此我得到

Object #<HTMLButtonElement> has no method 'getDataFromServer' 

我知道这是一个简单的问题,但有人能为我指出正确的答案吗?

<div id="cp">
<ul>
<li><button id="light_switch">Light On</button></li>

</ul>
</div>

<div id="room">
</div>
<script type="text/javascript">
var CP = function(widget, light_switch){
this.widget_name = widget;
this.light_switch = light_switch;
var self = this;
console.log(this);
};
CP.prototype.init = function(){
$("#"+this.light_switch).on('click', this.turnlighton);
};
CP.prototype.somecallback = function(){
console.log(this);
};
CP.prototype.turnlighton = function(){
this.getDataFromServer(somecallback);
};
CP.prototype.getDataFromServer = function(callback){
$.ajax({url:"/"+fname,
success:function(result){
callback(result);
}
});
};

$( document ).ready(function(){
var c = new CP("control_panel", "light_switch");
c.init();
}
);
</script>

最佳答案

在点击处理程序中 this 默认情况下将引用点击的元素,您可以使用 Function.bind() 传递自定义上下文或$.proxy()

$("#" + this.light_switch).on('click', $.proxy(this.turnlighton, this));

演示:Fiddle

关于按下按钮时,Javascript简单类作用域会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22677946/

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