我正在尝试为函数和方法(对象的函数)使用相同的方法名称,并从方法内部调用函数。但是,该函数根本不会被调用。这些是功能的相关位:
function post(url, data, success, error) {
console.log("Sending"); // This doesn't get even called
var request = new XMLHttpRequest(); // Nor a request is made
// ... (more code here)
}
方法的相关位
function u(parameter) {
// ... more code here
this.post = function(success, error) { // post request
this.on("submit", function(e) { // Loop through all the nodes
e.preventDefault(); // Stop the browser from sending a request
console.log("Going to send your data"); // This works
post(u(this).attr("action"), u(this).serialize(), success, error); // Post the actual data
console.log("Got here"); // Well it's async, but it also gets here
});
return this;
}
return this;
}
发送表单时应该从此脚本调用:
u("form").post(function(){
alert("Yay, it worked");
}, function(){
alert("Something went wrong");
});
它成功调用该方法,并显示两条消息。但是,不会记录函数中的Sending
,也不会执行任何请求。我正在考虑范围问题或功能名称被覆盖,但我不是这里的专家所以任何帮助将不胜感激。 为什么没有调用函数post()?控制台中绝对没有显示错误。
经过一些测试,我可以确认问题是他们共享这个名字。那么,我怎样才能为方法和函数分享相同的名称呢?该方法只会被调用为u("form").post(callA, callB);
而函数就像post(url, data, callA, callB)l;
答案 0 :(得分:1)
这是你对u
函数的调用有问题。您忘记了new
关键字,该关键字使this
context成为全局范围对象 - 然后您将覆盖全局post
变量。
两个修正:
(new u("form")).post(…);
或制作构造函数new
-agnostic post
函数放在全局范围内。使用模块模式。