вызов прототипа функции в JavaScript без создания объекта - PullRequest
1 голос
/ 05 февраля 2011

Я пытаюсь вызвать функцию-прототип из другого файла javascript, но она не работает.

BuddyList.js:

function BuddyList(){ .. }

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

UserOptions.js:

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

Я получаю сообщение о том, что в BuddyList нет метода addBuddy

Ответы [ 3 ]

1 голос
/ 05 февраля 2011

Вам не нужно использовать метод .prototype. Поскольку все в JS является объектом, вы можете просто расширить BuddyList с помощью новой функции:

function BuddyList(){
     // do whatever
}

BuddyList.addBuddy = function(username){
      // do whatever
}
0 голосов
/ 06 сентября 2018

Вы не можете получить доступ к функции-прототипу до тех пор, пока не создадите экземпляр для объекта или функции.Так что вместо

BuddyList.addBuddy(buddyName) 

вы должны написать

new BuddyList().addBuddy(buddyName)
0 голосов
/ 05 февраля 2011

.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)

Это действительно зависит от того, что вы пытаетесь сделать.

...