javascript - 如何使用 Javascript 创建动态对象?

标签 javascript jquery

我正在使用 Javacript(带有 jQ​​uery)为我的用户界面创建一个 Manager 对象。总体思路是捕获所有可点击元素(使用 .clickable 类定义),然后根据元素的 id 创建相应的对象来处理所需的操作。

这是我的 Manager 对象定义:

function Manager() {

    this.init = function() {
        $('.clickable').click( function() {
            var l = this.id.split("_");
            var controller = Manager.ucfirst(l[0]) + "()";
            var action = l[1];
            var nclass = new controler;
        });
    };

    this.init();
}

当用户点击可点击元素时

<a id="user_login" class="clickable">Login</a>

然后这个Manager应该创建一个对象User(id的第一部分,首字母大写),然后执行方法login(id的第二部分)。

但实际上,当我单击该元素时,我收到“未捕获的类型错误:字符串不是函数”。

好吧,我知道字符串不是函数!但我假设 Javascript 足够聪明,可以拥有类似 PHP 中的 $$ 变量的东西。

我做了一些研究,但没有实际结果。有人可以帮我吗?

最佳答案

您可以这样做:

function Manager() {

    this.init = function() {

        $('.clickable').click( function() {
            var l = this.id.split("_");

            var controller = Manager[l[0][0].toUpperCase() + l[0].substring(1)];
            var action = l[1];

            var nclass = new controler;
        });

    };

    this.init();
 }

要点是您应该为 Controller 分配一个函数类型,而不是一个看起来像函数调用表达式的字符串。如果引用的 Manager 实例定义了一个名为 Manager[l[0][0].toUpperCase() + l[0].substring(1)] 的评估的属性,那么这应该有效。 。否则,它仍然会失败。

我必须说我不太清楚您的问题的背景,因此我建议以下方法可能会更好、更全面地解决您的问题:

var Manager = ({
    User: function(){ // here's your user constructor
          // ...
    },
    init: function() {

        var self = this;

        $('.clickable').click( function() {
            var l = this.id.split("_");

            var controller, nclass,
                action = l[1],
                controllerName = l[0][0].toUpperCase() + l[0].substring(1);

            if(self[controllerName]){ // checking if it exist cos you never know where the shit that happens all come from.
                controller = self[controllerName]; // returns the constructor
                nclass = new controler; // invokes the constructor
            } else{
                throw new Error("Don't know what to do with unknown controller: '" + controllerName + "'";
            }

        });

        return this; // i.e self
    }
}).init();

关于javascript - 如何使用 Javascript 创建动态对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838265/

相关文章:

jquery - 使用 jQuery UI 显示消息

javascript - Ooxml 中不显示下划线

javascript - shopify 如何创建产品色样

javascript - Backbone : Make collection from slice of another collection

javascript - 如何向上滚动文本并覆盖 javascript/jquery 中的现有文本?

jquery - 无需 Web 服务即可自动完成?

javascript - 在一系列异步 XHR 调用之后添加 'callback' 的最佳方法

javascript - 散列 JavaScript 对象

javascript - 在 ASP.NET 复合控件中使用 javascript

jquery - FullCalendar - 避免滚动条