Javascript stop";这";来自函数调用更改的关键字?

Javascript stop";这";来自函数调用更改的关键字?,javascript,onclick,this,call,keyword,Javascript,Onclick,This,Call,Keyword,我在想。我有一个按钮,当我按下它时,我会在那里调用一个函数。我使用JQuery这样做: this.chose_button.on('click', function() { tryInputSong(this, this.link_input.val()); }); 但问题是,我需要“tryInputSong”的输入参数与“this.choosed_button”中的“this”关键字是同一个对象,而不是“this.choosed_button”对象本身。有没有办法阻止“this”关键字将

我在想。我有一个按钮,当我按下它时,我会在那里调用一个函数。我使用JQuery这样做:

this.chose_button.on('click', function() {
  tryInputSong(this, this.link_input.val());
});
但问题是,我需要“tryInputSong”的输入参数与“this.choosed_button”中的“this”关键字是同一个对象,而不是“this.choosed_button”对象本身。有没有办法阻止“this”关键字将值更改为this.choosed_按钮,或者我必须以某种方式通过另一个函数传递我想要的对象


我真的很困惑如何解决这个问题,我希望能得到一些帮助,谢谢!:)

传统的解决方法是从您想要的上下文中存储对此的引用,并在以后重用它:

var self = this;
this.chose_button.on('click', function() {
  tryInputSong(self, self.link_input.val());
});
您还可以在函数上显式绑定此值:

this.chose_button.on('click', function() {
  tryInputSong(this, this.link_input.val());
}.bind(this));
或者,如果您的环境支持ES6 arrow函数(或者您使用transpiler添加相应的多边形填充),则可以使用不会更改此绑定的

this.chose_button.on('click', () => {
  tryInputSong(this, this.link_input.val());
});

传统的解决方法是从您想要的上下文中存储对此的引用,并在以后重用:

var self = this;
this.chose_button.on('click', function() {
  tryInputSong(self, self.link_input.val());
});
您还可以在函数上显式绑定此值:

this.chose_button.on('click', function() {
  tryInputSong(this, this.link_input.val());
}.bind(this));
或者,如果您的环境支持ES6 arrow函数(或者您使用transpiler添加相应的多边形填充),则可以使用不会更改此绑定的

this.chose_button.on('click', () => {
  tryInputSong(this, this.link_input.val());
});

JS引入了箭头函数,允许您引用外部

this.chose_button.on('click', event => 
  tryInputSong(this, this.link_input.val())
);
由于箭头函数不绑定它们自己的本地
this
,因此它使用来自外部环境的本地

我上面展示的语法有一个表达式作为函数体。如果需要多个语句,那么可以使用大括号定义主体,就像使用传统的
function
语法一样


您仍然可以通过
事件获取对绑定元素的引用。currentTarget

JS引入了箭头函数,允许您引用外部

this.chose_button.on('click', event => 
  tryInputSong(this, this.link_input.val())
);
由于箭头函数不绑定它们自己的本地
this
,因此它使用来自外部环境的本地

我上面展示的语法有一个表达式作为函数体。如果需要多个语句,那么可以使用大括号定义主体,就像使用传统的
function
语法一样


您仍然可以通过
事件获取对绑定元素的引用。currentTarget

您可以这样做:

var self = this;
this.chose_button.on('click', function() {
  tryInputSong(self, self.link_input.val());
});

或者使用箭头函数:箭头函数没有自己的箭头函数;使用封闭执行上下文的此值

您可以这样做:

var self = this;
this.chose_button.on('click', function() {
  tryInputSong(self, self.link_input.val());
});

或者使用箭头函数:箭头函数没有自己的箭头函数;使用封闭执行上下文的this值

var oldThis=this
,然后您可以执行
tryInputSong(oldThis,oldThis.link_input.val())
var oldThis=this
然后您可以执行
tryInputSong(oldThis,oldThis.link_input.val())箭头功能的可用性取决于所需的浏览器支持以及是否使用babel进行传输。@lkroneman:是的,非常正确。箭头功能的可用性取决于所需的浏览器支持以及是否使用babel进行传输。@lkroneman:是的,非常正确。