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行)。所以我理解当你启动应用程序时,各种功能的副本都是用正确的'这个'创建的。绑定到功能。但是......何时/如何实际调用它们而不将它们分配给变量?如何访问这些副本?
我认为我对绑定方法有一个有缺陷的理解,所以我会喜欢一些帮助。谢谢!
答案 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