当某些事件发生时,我试图通过名称调用对象的方法 - 这是我的代码:
var imageObject = {
sendImage : function(obj) {
"use strict";
var thisId = obj.attr('id');
var thisSubmit = obj.attr('data-submit');
var thisCallback = obj.attr('data-callback');
var thisUrl = $('#' + obj.attr('data-url')).text();
new AjaxUpload(thisId, {
action: thisUrl,
name: 'thisfile',
onSubmit: imageObject.thisSubmit,
onComplete: imageObject.thisCallback
});
}
}
我还想将参数传递给submit和callback方法。
目前没有任何事情发生,我确信我没有正确地说 - 有人能解释如何实现这个目标吗?
我还使用以下内容提交并完成:
onSubmit: function(file, extension) {
imageObject.thisSubmit(file, extension);
},
onComplete: function(file, response) {
imageObject.thisCallback(file, response);
}
但我得到的是错误说:
imageObject.thisSubmit is not a function
这些属性只存储方法中方法的名称(字符串) - 因此它就是'uploadImage'。
答案 0 :(得分:3)
TJ的答案几乎就在那里,除了(根据您的问题中的新代码),您需要将参数从onSubmit
复制到thisSubmit
,或使用.apply()
复制它们对你而言。
下面的代码使用后一种方法,避免不得不一遍又一遍地复制函数签名:
new AjaxUpload(thisId, {
action: thisUrl,
name: 'thisfile',
onSubmit: function() {
imageObject[thisSubmit].apply(imageObject, arguments);
},
onComplete: function() {
imageObject[thisCallback].apply(imageObject, arguments);
}
});
答案 1 :(得分:2)
如果我已正确理解您的问题,您需要使用方括号语法来访问属性:
new AjaxUpload(thisId, {
action: thisUrl,
name: 'thisfile',
onSubmit: function () { //Anonymous function so you can pass arguments
imageObject[thisSubmit]("myArg"); //Square brackets here
},
onComplete: imageObject[thisCallback] //Square brackets here (no arguments)
});
答案 2 :(得分:1)
我假设thisSubmit
和thisCallback
局部变量是imageObject
上存在的函数的名称。
两者都使用这些字符串中的名称调用这些方法,并传入参数,使用括号语法和闭包的组合:
var imageObject = {
sendImage : function(obj) {
"use strict";
var thisId = obj.attr('id');
var thisSubmit = obj.attr('data-submit');
var thisCallback = obj.attr('data-callback');
var thisUrl = $('#' + obj.attr('data-url')).text();
new AjaxUpload(thisId, {
action: thisUrl,
name: 'thisfile',
onSubmit: function() {
imageObject[thisSubmit](arg, anotherArg, etc);
},
onComplete: function() {
imageObject[thisCallback](arg, anotherArg, etc);
}
});
}
// Presumably there are more methods here, or added later...
}
答案 3 :(得分:-1)
你必须使用call
来调用js中的函数
onSubmit: function(file, extension) {
imageObject.thisSubmit.call(undefined, file,extension);
},