我试图从另一个javascript文件调用一个原型函数,但它似乎不起作用。
BuddyList.js:
function BuddyList(){ .. }
BuddyList.prototype = {
addBuddy : function(buddyName){...}
}
UserOptions.js:
function UserOptions(){
....
BuddyList.addBuddy(username);
}
我收到一条错误,指出BuddyList没有名为addBuddy的方法
答案 0 :(得分:1)
您不需要使用.prototype方法。由于JS中的所有内容都是对象,因此您只需使用新函数扩展BuddyList:
function BuddyList(){
// do whatever
}
BuddyList.addBuddy = function(username){
// do whatever
}
答案 1 :(得分:0)
.addBuddy
是在从BuddyList
构造函数构造的对象上定义的。
你不能像你想要的那样调用对象的方法。
您可能希望将其创建为“静态”功能
BuddyList.addBuddy = function(buddyName) { ... }
然后你可以从原型中调用它
BuddyList.prototype.addBuddy = function(buddyName) {
BuddyList.addBuddy.apply(this, arguments)
}
您需要检查BuddyList
函数中对addBuddy
对象的任何引用。
记住BuddyList
是一个对象构造函数。在构造函数上调用addBuddy
方法没有意义。我认为你通常希望这样做
buddyList = new BuddyList;
buddyList.append(someBuddy);
理论上,如果只有一个BuddyList,那么你可能想要寻找
BuddyList = new BuddyList;
这将使用从构造函数继承的对象覆盖构造函数。
您可以随时通过原型直接调用addBuddy
方法,而不是对象,如下所示:
BuddyList.prototype.addBudy.call(this, someBuddy)
这实际上取决于你想做什么。
答案 2 :(得分:0)
除非,除非您为对象或函数创建实例,否则您将无法访问原型函数。因此,而不是
BuddyList.addBuddy(buddyName)
您必须写
new BuddyList().addBuddy(buddyName)