2013-01-10 29 views
0

我有2个班,基地和儿童:如何识别原型?

// 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); 

如何我现在可以识别,如果这个变量是circlepizza

我知道我可以添加一个函数,它会返回名称或保留属性与类型名称,但我想知道是否有另一种方式而不更改我的任何类。

谢谢!

+1

[的instanceof(https://developer.mozilla.org/docs/JavaScript/Reference/Operators/instanceof);) – Yoshi

+2

不相关的问题,但你或许应该叫'pizza'构造函数的'circle'构造函数,而不是设置'this.radius'。例如,'circle.call(this,radius);'。 –

回答

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

你可以使用instanceof

var p = new pizza(); 
console.log(p instanceof pizza) //true 
console.log(p instanceof circle) //true also
+0

steveukx刚刚发布了几乎相同的答案,但更好,所以忽略此 – olsn