在javascript中调用prototyped函数而不创建对象

问题描述 投票:1回答:3

我试图从另一个javascript文件调用原型函数,但它似乎不起作用。

BuddyList.js:

function BuddyList(){ .. }

BuddyList.prototype = {
    addBuddy : function(buddyName){...}
}

UserOptions.js:

function UserOptions(){
....
BuddyList.addBuddy(username);
}

我收到一条错误,指出BuddyList没有名为addBuddy的方法

javascript prototype
3个回答
1
投票

您不需要使用.prototype方法。由于JS中的所有内容都是对象,因此您只需使用新函数扩展BuddyList:

function BuddyList(){
     // do whatever
}

BuddyList.addBuddy = function(username){
      // do whatever
}

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)

这真的取决于你想做什么。


0
投票

除非您为对象或函数创建实例,否则无法访问原型函数。而不是

BuddyList.addBuddy(buddyName) 

你必须写

new BuddyList().addBuddy(buddyName)
© www.soinside.com 2019 - 2024. All rights reserved.