Вызов функции для объекта из этого объекта с прототипом - PullRequest
1 голос
/ 08 марта 2012

У меня возникают проблемы, когда я пытаюсь вызвать функцию для объекта из этого же объекта.Я читал, что вызов функции для объекта из этого объекта возможен здесь , поэтому я думаю, что именно мое использование prototype является причиной проблемы.Вот пример:

function Foo() {
    this.DoStuff();
}

Foo.prototype.DoStuff = function() {
    alert("I'm frantically doing stuff!");
}

Этот код (или что-то очень похожее) просто не хочет работать.Есть идеи почему?

Ответы [ 3 ]

5 голосов
/ 08 марта 2012

То, что у вас должно работать нормально. Важно помнить, что значение this зависит от того, как вы вызываете функцию. Чтобы он работал так, как вы ожидаете, вам нужно использовать оператор new для вызова функции в качестве конструктора:

var foo = new Foo(); //`this` refers to this instance of Foo

Вот рабочий пример .

Если вы вызываете функцию как обычно, this ссылается на глобальный объект, у которого нет свойства DoStuff, поэтому выдается ошибка TypeError. Вот сломанный пример .

0 голосов
/ 08 марта 2012

Зависит от того, как вы звоните Foo().Если вы называете это напрямую, то this относится к тому, что this находится в этом контексте.Если вы вызываете его с помощью оператора new, то this становится этим экземпляром этого объекта, а затем он получает доступ к DoStuff().

var foo = new Foo(); // works!
0 голосов
/ 08 марта 2012

Я собираюсь предположить, что ваш оператор-прототип объявлен после того, как вы попытаетесь использовать Foo ().

Это должно работать:

Foo.prototype.DoStuff = function() { alert("stuff") };
myfoo = new Foo();

Это не должно:

myfoo = new Foo();
Foo.prototype.DoStuff = function() { alert("stuff"); };
...