繁体   English   中英

如何在javascript中调用实例化的类'函数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM