Baseline Widely available
ÐпеÑаÑÐ¾Ñ instanceof
пÑовеÑÑеÑ, пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ Ð»Ð¸ обÑÐµÐºÑ Ðº опÑеделÑÐ½Ð½Ð¾Ð¼Ñ ÐºÐ»Ð°ÑÑÑ. ÐÑÑгими Ñловами, object instanceof constructor
пÑовеÑÑеÑ, пÑиÑÑÑÑÑвÑÐµÑ Ð»Ð¸ обÑÐµÐºÑ constructor.prototype
в ÑепоÑке пÑоÑоÑипов object
.
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const auto = new Car("Honda", "Accord", 1998);
console.log(auto instanceof Car);
// Expected output: true
console.log(auto instanceof Object);
// Expected output: true
СинÑакÑиÑ
object instanceof constructorÐаÑамеÑÑÑ
object
ÐÑовеÑÑемÑй обÑекÑ.
constructor
ФÑнкÑиÑ-конÑÑÑÑкÑоÑ, на коÑоÑÑÑ Ð¸Ð´ÑÑ Ð¿ÑовеÑка.
ÐпеÑаÑÐ¾Ñ instanceof
пÑовеÑÑеÑ, пÑиÑÑÑÑÑвÑÐµÑ Ð»Ð¸ обÑÐµÐºÑ constructor.prototype
в ÑепоÑке пÑоÑоÑипов object
.
// обÑÑвлÑем конÑÑÑÑкÑоÑÑ
function C() {}
function D() {}
var o = new C();
// true, Ñак как: Object.getPrototypeOf(o) === C.prototype
o instanceof C;
// false, Ñак как D.prototype не пÑиÑÑÑÑÑвÑÐµÑ Ð² ÑепоÑке пÑоÑоÑипов o
o instanceof D;
o instanceof Object; // true, Ñак как:
C.prototype instanceof Object; // true
C.prototype = {};
var o2 = new C();
o2 instanceof C; // true
// false, Ñак как C.prototype оÑÑÑÑÑÑвÑÐµÑ Ð² ÑепоÑке пÑоÑоÑипов o
o instanceof C;
D.prototype = new C(); // add C to [[Prototype]] linkage of D
var o3 = new D();
o3 instanceof D; // true
o3 instanceof C; // true, Ñак как C.prototype ÑепеÑÑ Ð¿ÑиÑÑÑÑÑвÑÐµÑ Ð² ÑепоÑке пÑоÑоÑипов o3
ÐбÑаÑиÑе внимание: ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑоÑа instanceof
завиÑÐ¸Ñ Ð¾Ñ ÑвойÑÑва constructor.prototype
, поÑÑÐ¾Ð¼Ñ ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑоÑа Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼ÐµÐ½ÑÑÑÑÑ Ð¿Ð¾Ñле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑого ÑвойÑÑва. Также ÑезÑлÑÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼ÐµÐ½ÑÑÑÑÑ Ð¿Ð¾Ñле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÑоÑоÑипа object
(или ÑепоÑки пÑоÑоÑипов) Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Object.setPrototypeOf
или неÑÑандаÑÑного ÑвойÑÑва __proto__
.
instanceof
и множеÑÑвеннÑе конÑекÑÑÑ (напÑимеÑ, ÑÑÐµÐ¹Ð¼Ñ Ð¸Ð»Ð¸ окна)
РазлиÑнÑе конÑекÑÑÑ Ð¸Ð¼ÐµÑÑ ÑазнÑе ÑÑÐµÐ´Ñ Ð²ÑполнениÑ. ÐÑо ознаÑаеÑ, ÑÑо они имеÑÑ ÑазлиÑнÑе built-ins (ÑазнÑй глобалÑнÑй обÑекÑ, ÑазлиÑнÑе конÑÑÑÑкÑоÑÑ Ð¸ Ñ.д.). ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°Ð²Ð°ÑÑ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñе ÑезÑлÑÑаÑÑ. ÐапÑимеÑ, [] instanceof window.frames[0].Array
веÑнÑÑ false
, поÑÐ¾Ð¼Ñ ÑÑо Array.prototype !== window.frames[0].Array
а маÑÑив наÑледÑеÑÑÑ Ð¾Ñ Array
.
ÐÑо Ð¼Ð¾Ð¶ÐµÑ ÐºÐ°Ð·Ð°ÑÑÑÑ Ð½ÐµÑÑÑеÑÑвенной пÑоблемой ÑнаÑала, но пÑи ÑабоÑе Ñ Ð½ÐµÑколÑкими ÑÑеймами или окнами, и пеÑедаÑи обÑекÑов из одного конÑекÑÑа в дÑÑгой Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑий, ÑÑо Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ ÑеÑÑÑзной пÑоблемой. С дÑÑгой ÑÑоÑонÑ, безопаÑно пÑовеÑиÑÑ, ÑвлÑеÑÑÑ Ð»Ð¸ некоÑоÑÑй обÑÐµÐºÑ Ð¼Ð°ÑÑивом можно иÑполÑзÑÑ Array.isArray(myObj)
.
ÐапÑимеÑ, Ð´Ð»Ñ Ð¿ÑовеÑки Ñого, ÑÑо Node ÑвлÑеÑÑÑ SVGElement в ÑазнÑÑ
конÑекÑÑаÑ
можно иÑполÑзоваÑÑ myNode instanceof myNode.ownerDocument.defaultView.SVGElement
.
ÐÑимеÑание: ÐÑполÑзование XPCOM instanceof
в коде Ð¸Ð¼ÐµÐµÑ ÑпеÑиалÑнÑй ÑÑÑекÑ: obj instanceof xpcomInterface
(напÑÐ¸Ð¼ÐµÑ Components.interfaces.nsIFile
) вÑзÑÐ²Ð°ÐµÑ obj.QueryInterface(xpcomInterface)
и возвÑаÑÐ°ÐµÑ true
еÑли пÑовеÑка на QueryInterface пÑоÑла ÑÑпеÑно. ÐобоÑнÑм ÑÑÑекÑом ÑÑого вÑзова ÑвлÑеÑÑÑ Ñо, ÑÑо можно иÑполÑзоваÑÑ ÑвойÑÑва xpcomInterface
на obj
поÑле ÑÑпеÑной пÑовеÑки Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ instanceof
. РоÑлиÑии Ð¾Ñ ÑÑандаÑÑнÑÑ
глобалÑнÑÑ
JavaScript Ñипов, пÑовеÑка obj instanceof xpcomInterface
ÑабоÑÐ°ÐµÑ ÐºÐ°Ðº ожидаеÑÑÑ, даже еÑли obj
оÑноÑиÑÑÑ Ðº дÑÑÐ³Ð¾Ð¼Ñ ÐºÐ¾Ð½ÑекÑÑÑ.
String
и Date
имеÑÑ Ñип Object
и гÑаниÑнÑе ÑлÑÑаи
СледÑÑÑий код иÑполÑзÑÐµÑ instanceof
, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ ÑÑо обÑекÑÑ String
и Date
Ñакже имеÑÑ Ñип Object
(они ÑвлÑÑÑÑÑ Ð½Ð°Ñледниками Object
).
Ðднако, обÑекÑÑ, ÑозданнÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð»Ð¸ÑеÑалов, ÑвлÑÑÑÑÑ Ð¸ÑклÑÑениÑми â Ñ
оÑÑ Ð¸Ñ
prototype Ñавен undefined
, вÑÑажение instanceof Object
возвÑаÑÐ°ÐµÑ true
.
var simpleStr = "ÐÑо обÑÑÐ½Ð°Ñ ÑÑÑока";
var myString = new String();
var newStr = new String("СÑÑока, ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð°Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑоÑа");
var myDate = new Date();
var myObj = {};
simpleStr instanceof String; // возвÑаÑÐ°ÐµÑ false, пÑовеÑÑÐµÑ ÑепоÑÐºÑ Ð¿ÑоÑоÑипов
myString instanceof String; // возвÑаÑÐ°ÐµÑ true
newStr instanceof String; // возвÑаÑÐ°ÐµÑ true
myString instanceof Object; // возвÑаÑÐ°ÐµÑ true
myObj instanceof Object; // возвÑаÑÐ°ÐµÑ true, неÑмоÑÑÑ Ð½Ð° пÑоÑоÑип, ÑавнÑй undefined
({}) instanceof Object; // возвÑаÑÐ°ÐµÑ true, аналогиÑно пÑедÑдÑÑей ÑÑÑоÑке
myString instanceof Date; // возвÑаÑÐ°ÐµÑ false
myDate instanceof Date; // возвÑаÑÐ°ÐµÑ true
myDate instanceof Object; // возвÑаÑÐ°ÐµÑ true
myDate instanceof String; // возвÑаÑÐ°ÐµÑ false
ÐоказÑваеÑ, ÑÑо mycar
Ð¸Ð¼ÐµÐµÑ Ñип Car
и Ñип Object
СледÑÑÑий код ÑоздаÑÑ Ñип Car
и ÑкземплÑÑ ÑÑого Ñипа, mycar
. ÐпеÑаÑÐ¾Ñ instanceof
показÑваеÑ, ÑÑо обÑÐµÐºÑ mycar
Ð¸Ð¼ÐµÐµÑ Ñип Car
и Ñип Object
.
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
var mycar = new Car("Honda", "Accord", 1998);
var a = mycar instanceof Car; // возвÑаÑÐ°ÐµÑ true
var b = mycar instanceof Object; // возвÑаÑÐ°ÐµÑ true
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4