原型模式(调用函数)
Prototype pattern (calling function)
我正在尝试使用Addy Osmani的原型模式。
我有一个对象"app",在提交表单时,我正在尝试在我的 init 函数中调用一个函数。但它不是控制台日志记录...
$(document).ready(function() {
var app = {
logHello: function() {
console.log('hello');
},
initialize: function() {
$('#userlogin').on('submit', function(){
this.logHello;
return false;
});
}
}
app.initialize();
});
我哪里出错了?
this
现在指的是你的jQuery on submit
函数,尝试使用上下文变量this
(另外,在调用函数后需要()
):
var self = this;
$('#userlogin').on('submit', function(){
self.logHello();
return false;
});
演示:http://jsfiddle.net/59Y9z/
initialize: function() {
var self=this;
$('#userlogin').on('submit', function(){
self.logHello();
return false;
});
}
这个关键字根据函数作用域而变化,另一个函数中的一个函数创建一个新作用域,除非它以某种方式绑定到作用域。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
这是一个范围问题。在提交事件处理程序中,this
变量引用函数的作用域,而不是logHello
函数所在的app
作用域。
尝试这样的事情:
...
initialize: function() {
var old_scope = this; // save the scope into a local variable
$( '#userlogin' ).on( 'submit' , function() {
old_scope.logHello;
return false;
});
},
...
变量old_scope
现在将包含 app
的作用域,因此您将能够访问app
包含的所有变量和函数。
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- 如何通过函数调用设置图像的src
- 从全局函数调用Ember控制器上的方法
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JavaScript函数调用(arg1)(arg2)
- 打印链接时,将javascript函数调用到链接中
- 在函数调用中封装数据除了隐藏数据之外还有什么优点
- 无法从JavaScript中的函数调用对象属性
- 对中的函数调用进行排序是回调的唯一方法
- 函数调用方法有什么用
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- HTML5(Bootstrap)通过函数调用运行动画
- 函数调用不起作用
- 函数中的Javascript函数调用