在这种情况下,$(' id')on(' click',this.method.bind(this))到底是做什么的?

时间:2018-05-30 02:37:55

标签: javascript jquery this

Here is the app I'm referring to:

我试图从根本上理解Javascript中的bind方法。

当我在控制台中使用它时,我的理解是bind返回函数的副本,使用" this"绑定到你传入bind的任何东西。

function logThis(){
  console.log(this)
}
logThis.bind({today: 'Tuesday'})
//Will return a copy of the logThis function, with 'this' set to the 
{today:'Tuesday'} object. The code does not run right away though.

var explicitlyLogThis = logThis.bind({today: 'Tuesday'});
explicitlyLogThis(); //This will run the code and display the {today: 'Tuesday'} object to the console. 

这是我迄今为止的理解。我明白要实际运行这个具有'这个'使用bind方法显式绑定,您需要将其设置为变量然后运行它。

当我在上面的链接中查看应用程序时,我发现了一个矛盾。如果你看看第56行的bindEvents方法,我们有.on(' keyup',this.create.bind(this))。我知道我们必须设置这个'我们运行create方法时应用于app,因为jQuery默认设置'这个'到jQuery对象本身。所以这一行实际上与:$('#new-todo')。on(' keyup',App.create.bind(App))。

这不是我的困惑所在。我的问题是:

这些功能的副本到底是怎样的'这个'设置为App实际被调用?应用程序不会将它们设置为变量,然后按照我在控制台中工作时的方式调用该变量。

只要在其中一个jQuery元素上发生事件,它就会直接调用绑定函数。但我认为以这种方式编写它只会返回函数的副本,而不是运行函数本身,如果我的假设是基于我在上面编写的代码中弄清楚的。我想为了立即调用函数,你需要使用call或apply。

我也意识到app在启动时会运行bindEvents方法(参见第46行)。所以我理解当你启动应用程序时,各种功能的副本都是用正确的'这个'创建的。绑定到功能。但是......何时/如何实际调用它们而不将它们分配给变量?如何访问这些副本?

我认为我对绑定方法有一个有缺陷的理解,所以我会喜欢一些帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

听起来你理解GET已经足够了。也许与传递匿名函数有些混淆。如您所知,调用bind会返回一个新函数,并且可以选择将其存储为变量或作为函数参数传递。

在下面的示例中,btn1接受您已经看过的绑定函数。这也可以用btn2以更长的方式编写。他们是完全相同的。 btn3没有收到绑定函数,当单击其上下文是按钮元素时,@Configuration @EnableResourceServer public class OAuth2ResourceServerConfigRemoteTokenService extends ResourceServerConfigurerAdapter { @Override public void configure(final HttpSecurity http) throws Exception { http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) .and() .authorizeRequests().anyRequest().permitAll(); } @Primary @Bean public RemoteTokenServices tokenServices() { final RemoteTokenServices tokenService = new RemoteTokenServices(); tokenService.setCheckTokenEndpointUrl("http://myoauthserver/oauth/check_token"); tokenService.setClientId("clientid"); tokenService.setClientSecret("password"); return tokenService; } } 将失去bind函数的所有可见性。



this