Javascript令人困惑的对象功能“没有方法”错误

时间:2012-01-15 23:10:02

标签: javascript function object

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

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'

是什么给出了?

4 个答案:

答案 0 :(得分:13)

要使用Students的实现,您应该这样做:

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

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

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

然后你可以这样称呼它:

Students.add();

答案 1 :(得分:3)

学生应该被称为构造函数

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

Students内,this将是一个继承Student's prorotype的新对象,并自动返回。所以说

this.add = function() ....

add函数添加到要返回的此对象上。但是每次调用此函数时,都会创建 de novo 函数。为什么不将它添加到原型中,因此该功能仅存在一次,而不必每次都不必要地重新创建。

Students.prototype.add = function(){

答案 2 :(得分:2)

您没有使用该代码向“学生”功能添加“添加”功能;您将它添加到使用“Students”作为构造函数创建的实例

var student = new Students();

student.add(); // won't get the error

答案 3 :(得分:1)

好吧,Students没有add方法。

我想你假设你知道this是如何运作的。它不是对函数的引用,除非您手动执行此操作。 this的值完全取决于您调用Students 的方式。