所以我有一个看起来像这样的函数:
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'
是什么给出了?
答案 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
的方式。