Jump to content
  • 0

instanceof и isPrototypeOf - есть ли разница?


rgl
 Share

Question

var a = [];

a instanceof Array // true

Array.prototype.isPrototypeOf( a ) // true

a instanceof Object // true

Object.prototype.isPrototypeOf( a ) // true

a instanceof Date // false

Date.prototype.isPrototypeOf( a ) // false

Вопрос: instanceof и isPrototypeOf всегда выдают одно и то же? Если да, то зачем нужно и то и другое если достаточно чего-то одного? Если нет - пример?

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Итак: Function, Number, Array, Date, Boolean, Object - это всё объекты. Соответственно var a = [], равнозначно var a = new Array.

Object это объект всем объектам объект: от него наследуются все остальные, в том числе и array, number и проч. Поэтому в прототипной цепи наследования находятся и Object и Array. Вот как это понимаю я.

-

блин я ответил не прочитав вопрос :(

Edited by moron
Link to comment
Share on other sites

  • 0

isPrototypeOf

Notes: isPrototypeOf differs from instanceof operator. In the expression object instanceof AFunction, the object prototype chain is checked against AFunction.prototype, not against AFunction itself

Ага, это понятно, но это разница в том, как применять, т.е.

a instanceof Array - instanceof принимает в качестве аргументов сам объект, и предполагаемую функцию-конструктор.

Array.prototype.isPrototypeOf( a ) - а тут нужно явно указывать предполагаемый прототип, т.е. писать не просто Array а Array.prototype

Но вопрос не об этом, а о том, есть ли различие в возвращаемом значении или оно всегда одно и то же.

Link to comment
Share on other sites

  • 0

Да работают одинаково вроде бы, вовсяком случае я не вижу различий. Но в одном случае это оператор языка, а в другом метод объекта.

Тест по быстродействию http://jsperf.com/in...s-isprototypeof на данный счет.

Edited by wwt
Link to comment
Share on other sites

  • 0

не заметил ) Утро ^__^ Но тем не менее еще один пример http://learn.javascr....ru/play/LSMyGb

по вопросу: на первый взгляд выглядят одинаково. Может есть какой сакральный смысл, хз...

Edited by nerv
Link to comment
Share on other sites

  • 0

вот щас заметил предложение такое вот:

This, along with the instanceof operator particularly comes in handy if you have code that can only function when dealing with objects descended from a specific prototype chain, e.g., to guarantee that certain methods or properties will be present on that object.

наряду с оператором instanceof тратата ))) То есть те же яйца только в профиль.

Хотя сейчас вот подумал, метод isPrototypeOf есть у любого объекта наследника Object, а вернее у его прототипа. Тогда я нашел пока только одно отличие:

http://learn.javascr...t.ru/play/8LgMl

метод можно переопределить , а вот instanceof продолжит работать как и должен.

Edited by wwt
Link to comment
Share on other sites

  • 0

Вопрос: instanceof и isPrototypeOf всегда выдают одно и то же?

http://learn.javascr....ru/play/GI45Ub

Ерунда какая-то. Сами-то поняли что написали?

Модифицирую ваш пример, строку 16 заменяю на:

Array.prototype.isPrototypeOf( x ),

и получается одно и то же.

Link to comment
Share on other sites

  • 0

Ерунда какая-то. Сами-то поняли что написали?

getPrototypeOf меняем на isPrototypeOf ))

не заметил ) Утро ^__^

метод можно переопределить

да, но при желании его можно взять еще откуда-нибудь. Честно сказать, в isPrototypeOf лично я никакого профита не вижу: работает медленно, писать больше...

Edited by nerv
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy