Объектно-ориентированный Javascript, почему методы объекта не будут работать из моего метода init? - PullRequest
0 голосов
/ 16 декабря 2011

Этот код адаптирован из вступления mozilla к объектно-ориентированной js-странице: Введение в объектно-ориентированный JavaScript

Когда я запускаю следующий код JavaScript, я не получаю "привет"msgstr "предупреждение о том, что sayHello был вызван правильно.В документах Mozilla создание и вызов объектов person не попадают в функцию init, которую я скопировал в нижний пример.Что дает?

window.onload = init();

function init()
{
    var person1 = new Person('Male');
    var person2 = new Person('Female');

    // call the Person sayHello method.
    person1.sayHello(); // hello
}

function Person(gender) {
  this.gender = gender;
  alert('Person instantiated');
}

Person.prototype.sayHello = function()
{
  alert ('hello');
};

рабочий пример:

function Person(gender) {
  this.gender = gender;
  alert('Person instantiated');
}

Person.prototype.sayHello = function()
{
  alert ('hello');
};

var person1 = new Person('Male');
var person2 = new Person('Female');

// call the Person sayHello method.
person1.sayHello(); // hello

1 Ответ

3 голосов
/ 16 декабря 2011
window.onload = init();

Вот твоя проблема.При этом запускается метод init, затем применяется возвращаемое значение (undefined) в качестве свойства onload для window.Так что ничего не происходит onload;все происходит сразу.Это означает, что это происходит до того, как вы измените Person.prototype.

. Вместо этого сделайте это, чтобы отложить выполнение:

window.onload = init;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...