所以我有一个函数,看起来像这样:
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
。