我有两个班,基地和孩子:
// base class
function circle(radius){
this.radius = radius;
return true;}
// child class
function pizza(flavour, radius){
this.radius = radius;
this.flavour = flavour;
return true;}
// Inheritance
pizza.prototype = new circle();
现在我正在创建一个披萨实例:
var myPizza = new pizza("Onion", 5);
我现在如何识别此变量是circle
还是pizza
?
我知道我可以添加一个函数来返回我的名字或者保存带有类型名称的属性,但我想知道是否有其他方法而不更改我的任何类。
谢谢!
答案 0 :(得分:4)
通过将pizza
类的原型设置为circle
类的实例,pizza
的任何实例都将自动从circle
继承。因此,instanceof
运算符将检查实例的构造函数:
(new pizza) instanceof pizza; // true
(new circle) instanceof circle; // true
并且还将走向原型链以检查实例继承的任何其他构造函数:
(new pizza) instanceof circle; // true
(new pizza) instanceof Object; // true
由于circle
不会从pizza
继承,因此您可以检查某些内容是circle
而不是pizza
:
(new circle) instanceof pizza; // false
答案 1 :(得分:1)
您可以使用instanceof
var p = new pizza(); console.log(p instanceof pizza) //true console.log(p instanceof circle) //true also