调用JavaScript类功能从jQuery的
MyClass = function() { }
MyClass.prototype.init = function(param){ }
MyClass.prototype.reset = function() { }
一个JavaScript类,如果我用onClick="reset()"
它的工作原理很好的调用这些函数从HTML页面。但如果我从jQuery调用这些函数,它不起作用。请给我建议。 从jQuery的示例调用:
$(document).ready(
function()
{
app = new MyClass();
app.init(someid, url,
"event_handling": {
"event1":app.reset
});
})
与上面一起,是有可能添加CSS规则,如:
"css_class_names": {
style-1: "firstStyle",
style-2: "secondStyle"
}
如果可能的话,那我怎么才能应用样式到具有特定元素ID 提前致谢!
你的问题是,当应用程序调用event1时,它将从不同于你预期的上下文中调用app.reset。换句话说,在你的app.reset中,“this”变量不会成为你想要的。原因是当你声明event1: app.reset
时,它将event1设置为函数app.reset。
解决方法:
"event1": function() { app.reset(); }
+1直接和重点。 :-) – 2013-02-28 09:24:42
It works.Thank非常感谢您的迅速帮助。 – user2118784 2013-02-28 09:47:58
@ user2118784我将不胜感激:) – yourdeveloperfriend 2013-02-28 09:52:21
你还没有真正显示从jQuery的你的电话,但我会猜是这样的:其实,你有,但问题是不与jQuery的呼叫。请参阅下面的细节。
假设:
$("some selector").click(app.reset);
...这里要传递的app
的方法为事件处理一个。
它不工作的原因是在调用方法中,this
不会引用app
实例,它会引用DOM元素。在JavaScript(现在)中,this
完全由函数的调用方式定义,而不是定义的位置。
您可以通过给函数在通话过程中正确this
值jQuery的$.proxy
function:
$("some selector").click($.proxy(app.reset, app));
或者,ECMAScript5定义Function#bind
此:
$("some selector").click(app.reset.bind(app));
...但是,这要求你正在使用一个实现它的引擎运行,或者你有一个ES5垫片。
OR,如果你碰巧有一个方便的,你可以使用闭包:
$("some selector").click(function() {
app.reset();
});
在那里,我们正在使用,你有app
变量躺在身边,通过在其上创建一个封闭(事实我们作为事件处理函数传递的函数)。
更多(在我的博客):
在您的代码:
$(document).ready(
function()
{
app = new MyClass();
app.init(someid, url,
"event_handling": {
"event1":app.reset
});
})
上述讨论适用于
"event1":app.reset
如果在某一点后,你叫event1()
,this
不会app
。
您可以将修复上面,像这样:
jQuery.proxy
:
"event1":$.proxy(app.reset, app)
Function#bind
:
"event1":app.reset.bind(app)
关闭:
"event1":function() { app.reset(); }
你只decla重新发挥功能。你永远不会说它。 – nhahtdh 2013-02-28 09:18:51
究竟是“不工作”? – Jon 2013-02-28 09:19:53
尝试“app.reset()”而不是“app.reset”,它的功能不是属性 – Merec 2013-02-28 09:20:49