Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: avdiev от 08 Октября 2004, 13:10:52

Название: Вопрос для JScript-асов: .prototype
Отправлено: avdiev от 08 Октября 2004, 13:10:52
Коллеги,

помогите, пожалуйста, разобраться, для чего и как работет метод "object1.isPrototypeOf(object2)" и связанные с ним? Кое-что, конечно, понял, но не до конца.
Из описания этого метода можно сделать вывод, что он позволяет определить "является ли object1 экземпляром класса, базового для класса, экземпляром которго является object2?". Так я понял MSDN со своим слабым английским. Из этого можно сделать вывод, что можно наследовать классы!?
Так ли всё это и как это делать? Мне удалось получть от этого метода значение true, только в таком коде:

// класс
function aa() {}
// объект
var a = new aa();
// вот так работет, т.е. возвращает true
Debug.writeln(aa.prototype.isPrototypeOf(a));

Но ведь этот же результат можно получить и конструкцией:

Debug.writeln(aa.constructor == a);

Так даже проще. Зачем же было огород городить? Не говоря уже о том, что в качестве object1 используется класс, а не объект, т.е. очевидная ошибка в MSDN!
Или я чего-то не понимаю?
Название: Вопрос для JScript-асов: .prototype
Отправлено: mike от 11 Октября 2004, 14:50:57
Цитировать
avdiev:
Но ведь этот же результат можно получить и конструкцией:

Debug.writeln(aa.constructor == a);

Если проверишь, то значение этого выражения будет false. Корректным будет
a.constructor == aa

Использование isPrototypeOf оправдано в таком случае:
function bb () {}

function aa () {}
aa.prototype = new bb();

a = new aa();

Debug.writeln(a.constructor == aa); //false
Debug.writeln(aa.prototype.isPrototypeOf(a)); //true

Поскольку
constructor - "specifies the function that creates an object."
Название: Вопрос для JScript-асов: .prototype
Отправлено: avdiev от 13 Октября 2004, 13:40:12
// Корректным будет:
//      a.constructor == aa

Верно, опечатался.

А ещё:
Debug.writeln(a.constructor == bb); //true

И вот, собственно, то, чего я добивался:
Debug.writeln(bb.prototype.isPrototypeOf(a)); //true

Не пойму, почему раньше этот же код не работал, а сейчас работает. Глюканат какой-то. Или невнимательность.

В общем, ответ я получил, большое спасибо.