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

この変数がcircleまたはであるかどうかをどのように識別できますかpizza?

名前を返す関数を追加したり、型名でプロパティを保持したりできることはわかっていますが、クラスを変更せずに別の方法があるかどうか疑問に思いました。

ありがとう!

4

2 に答える 2

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、何かが a であるcircleが a ではないことを次のように確認できますpizza

(new circle) instanceof pizza; // false
于 2013-01-10T07:57:02.330 に答える
1

あなたが使用できるinstanceof

var p = 新しいピザ();
console.log(ピザのインス​​タンス) //真
console.log(p instanceof circle) //これも真
于 2013-01-10T07:57:22.257 に答える