Javascript混淆对象函数"has no method"错误



所以我有一个函数,看起来像这样:

function Students(){
  // Function add:
  //  Returns: add page
  this.add = function(){
  // Get template
  $.get('view/students/new.html', function(template){
    // Templating
    var html = Mustache.to_html(template);
    // When document ready, write template to page
    $('document').ready(function(){
      $('#container').html(html);
    });
  });
};
};

当我尝试调用它的add函数时,如下所示:
Students.add();

我得到错误:Uncaught TypeError: Object function Students(){...}has no method 'add'

什么东西?

要使用Students的实现,您应该执行以下操作:

var students = new Students();
students.add();

然而,这可能不是你想要的。你可能想这样定义Students

var Students = {
    add: function() {
         $.get( /* ... */ );
    }
};

然后你可以这样称呼它:

Students.add();

学生将被调用为构造函数

var s = new Students();
s.add()

Students内部,this将是一个新对象,它继承自Students的protype,并自动返回。这么说

this.add = function() ....

正在将add函数添加到此返回的对象上。但每次调用此函数时,都会从头创建该函数。为什么不把它添加到原型中呢,这样函数只存在一次,而不必每次都不必要地重新创建。

Students.prototype.add = function(){

使用该代码不会向"Students"函数添加"add"函数;您将它添加到使用"Students"作为构造函数创建的实例中。

var student = new Students();
student.add(); // won't get the error

好吧,Students没有add方法。

我想你是在假设你知道this是如何工作的。除非您手动设置,否则它不是对函数的引用。this的值将完全取决于如何调用Students

相关内容

最新更新