Добрый день! Где можно увидеть как досконально работает оператор instanceof.
Вот пример, цепочки прототипов ("иерархия животных"). Несмотря на то, что тип Dog вообще не играет роли для типа Cat, оператор instanceof утверждает, что объект (cat1), созданный с помощью функции-конструктора Cat также является типом Dog??? (Если прототип собаки будет создаваться с помощью прототипа функции-конструктора из цепочки прототипов кота - то есть, например, так: Dog.prototype = Mammal.prototype). Но если же прототипом функции конструктора Dog будет являться конкретный новый объект Mammal (млекопитающее), созданный через оператор new, то есть так: Dog.prototype = new Mammal(), то объект cat1, уже не будет типом Dog. В чём причина??? Как работает этот оператор - instanceof?
var Animal = function(){
this.run = function(){
console.log("I am running or swimming...");
};
}
var Mammal = function(){
this.run = function(){
console.log("I am running!");
};
this.voice = function(){
console.log("...");
};
};
Mammal.prototype = new Animal();
var Cat = function(){
this.voice = function(){
console.log("Meow!!!");
};
};
Cat.prototype = new Mammal();
var DomesticCat = function(){
this.height = "80";
this.weight = "30";
}
DomesticCat.prototype = new Cat();
var Dog = function(){
this.height = "100";
this.weight = "50";
this.play_with_cat = function(){
console.log("I am playing!");
};
}
Dog.prototype = Mammal.prototype;
// если будет использоваться создание объекта через оператор new Mammal(), то выражение (cat1 instanseof Dog)
// результирует в false
var cat1 = new DomesticCat();
var dog1 = new Dog();
console.log(cat1 instanceof Dog); // true
console.log(dog1 instanceof Cat); // false