Автор Тема: Вопрос для JScript-асов: .prototype  (Прочитано 2481 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн avdiev

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Вопрос для JScript-асов: .prototype
« : 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!
Или я чего-то не понимаю?

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Вопрос для JScript-асов: .prototype
« Ответ #1 : 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."
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн avdiev

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Вопрос для JScript-асов: .prototype
« Ответ #2 : 13 Октября 2004, 13:40:12 »
// Корректным будет:
//      a.constructor == aa

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

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

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

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

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28