我正在使用 Javacript(带有 jQuery)为我的用户界面创建一个 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/