功能和方法名称相同,不能在后者内调用前者

时间:2014-06-10 22:04:03

标签: javascript scope naming

我正在尝试为函数和方法(对象的函数)使用相同的方法名称,并从方法内部调用函数。但是,该函数根本不会被调用。这些是功能的相关位:

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;

1 个答案:

答案 0 :(得分:1)

这是你对u函数的调用有问题。您忘记了new关键字,该关键字使this context成为全局范围对象 - 然后您将覆盖全局post变量。

两个修正:

  • 使用(new u("form")).post(…);或制作构造函数new-agnostic
  • 不要将post函数放在全局范围内。使用模块模式。