Forum Webscript.Ru
Программирование => JavaScript & JScript => Тема начата: 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!
Или я чего-то не понимаю?
-
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."
-
// Корректным будет:
// a.constructor == aa
Верно, опечатался.
А ещё:
Debug.writeln(a.constructor == bb); //true
И вот, собственно, то, чего я добивался:
Debug.writeln(bb.prototype.isPrototypeOf(a)); //true
Не пойму, почему раньше этот же код не работал, а сейчас работает. Глюканат какой-то. Или невнимательность.
В общем, ответ я получил, большое спасибо.