[英]How to call an instantiated class' function in javascript?
说实话,我可以调用函数,但只是硬编码方式。 而不是硬编码提交绑定我的getData函数,我想通过参数调用函数。 请帮帮我,怎么做。
谢谢。
formhandler = new xForm.Main(); // new formhandler
formhandler.setForm(this.formid); // fn.setForm(string) // configure the container, which has the form elements, or the form itself
modal = new xModal.Main(); // new modal handler
modal.setModal(this.modalid); // set modal element
modal.showModal(); // show
modal.bindClose(".cancel"); // bind closing classes
modal.bindSubmit(".submit", formhandler, "getData"); // bind submit to call formhandler.getData()
在xModal.js中
var xModal = xModal || {};
xModal.Main = function()
{
var self = this;
...
this.bindSubmit = function(classname, a, b)
{
this.closeclass = classname;
$("#"+this.target).find(classname).click(function(){
a.call(b); // edited after the original post, i forgot to replace the call's argument to b in the question excuse me for the inaccuracy
});
}
这个函数应该调用xForm中的getData(这里是xForm的片段)
var xForm = xForm || {};
xForm.Main = function()
{
var self = this;
this.target = "";
this.data = {};
...
this.getData = function()
{
getSingleElements();
getMultiElements();
return returnData();
}
更新:
我想我刚刚找到了一种方法来做到这一点,但请告诉我,如果我做了一些不正确的事情,或者你有一个更好的解决方案来解决这个问题(我很确定有人有)
我想,我有正确的方法。
在xForm中我创建了一个fn,它通过参数调用函数包含在self中(实际上等于此)
var xForm = xForm || {};
xForm.Main = function()
{
var self = this;
this.callFn = function(func)
{
return self[func].call(this);
}
...
然后我从另一个类(xModal)调用fn
var xModal = xModal || {};
xModal.Main = function()
{
var self = this;
this.bindSubmit = function(classname, a, b)
{
this.closeclass = classname;
$("#"+this.target).find(classname).click(function(){
a.callFn(b);
});
}
然后我只需告诉xModal:
modal.bindSubmit(".submit", formhandler, "getData"); // bind submit to call formhandler.getData()
所以现在模态类将调用args [1]的args [2]函数。 也可以通过apply方法为调用fn提供更多参数。
对我很好,但我不知道,也许你可以帮助我做得更好。
您将某个对象的方法名称绑定到submit事件:
modal.bindSubmit(".submit", formhandler, "getData");
但是你也希望将参数传递给方法。 这不是Javascript的做法。 相反,只需将匿名函数绑定到事件,然后在此匿名函数中调用您喜欢的方法:
modal.bindSubmit(".submit", function(){
formhandler.getData("My arguments");
});
你在我的例子中看到的是作为参数传递的匿名函数。 在Javascript中,字符串或整数之类的值与函数之间没有区别。 可以将函数赋值给变量,并作为参数传递。
为了更清楚,你也可以这样写:
var eventHandler = function(){
formhandler.getData("My arguments");
};
modal.bindSubmit(".submit", eventHandler);
这被称为“第一类函数”,并且是“函数式编程”范例的一部分。
在事件处理函数内部,您仍然可以访问其创建的scooe中的变量,如formhandler对象。 这被称为“封闭”。
阅读本文。 一开始它会使你的思绪陷入困境,但它确实值得您花时间,因为它会让您睁大眼睛看到更简单的解决方案。
从你的例子中,我不确定对象模态是什么。 如果它是一个jQuery元素,我的示例应该立即工作,但是,您需要更新代码以调用作为事件处理程序传入的函数,而不是调用对象上的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.