Объектный метод после obj.prototype = new ParentObj (); в JavaScript - PullRequest
2 голосов
/ 20 июня 2010

Я пытаюсь наследовать объекты в JavaScript.Взгляните на этот пример:

var BaseObject = function() {
};

var ChildObject = function() {
};

ChildObject.prototype.childMethod = function() {
};

ChildObject.prototype = new BaseObject();
ChildObject.prototype.constructor = ChildObject();

Однако, как только я делаю наследование прототипа, childMethod () исчезает.Что я тут не так делаю?

Ответы [ 2 ]

2 голосов
/ 20 июня 2010

Вы перезаписываете прототип, когда назначаете его BaseObject, а в прототипе BaseObject отсутствует метод childMethod.

Чтобы получить желаемое поведение, вы должны добавить childMethod после назначения прототипа BaseObject:

var BaseObject = function() {
};

var ChildObject = function() {
};


ChildObject.prototype = new BaseObject();
ChildObject.prototype.constructor = ChildObject;
ChildObject.prototype.childMethod = function() {
    return 'childMethod';
};
c = new ChildObject();
alert(c.childMethod());
1 голос
/ 20 июня 2010

В основном, когда вы устанавливаете создание ChildObject

var ChildObject = function() {
};

ChildObject.prototype указывает на экземпляр Object, поэтому при добавлении childMethod к прототипу ChildObject этот метод добавляется к этому объекту.

Но в этих 2 строках вы заменяете прототип ChildObject новым экземпляром BaseObject, который ничего не знает о childMethod

ChildObject.prototype = new BaseObject();
ChildObject.prototype.constructor = ChildObject();

Также я считаю, что это должно быть

ChildObject.prototype.constructor = ChildObject;

Таким образом, создается круговая ссылка.

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