2017-06-23 65 views
0

我想在JavaScript中使用父對象調用子方法我該怎麼做?如何在JavaScript中使用父對象調用子方法?

var Shape = function() { } 
    Shape.prototype.draw = function() { 
     return "Generic shape called "; 
    } 

    var Circle = function() { } 
    Circle.prototype = Object.create(Shape.prototype); 
    Circle.prototype.draw = function() { 
     return "I am from Circle"; 
    } 

    var Rectangle = function() { } 
    Rectangle.prototype = Object.create(Shape.prototype); 
    Rectangle.prototype.draw = function() { 
     return "I am from Rectangle"; 
    } 

    var Triangle = function() { } 
    Triangle.prototype = Object.create(Shape.prototype); 

我要訪問像長方形的任何覆蓋的方法,圈中的任何一個,但使用形狀的物體,像在C#中我們能做些什麼:)形狀的形狀=新圓()shape.draw(;它會調用孩子的重寫的方法class.I想要做同樣的事情在JavaScript我怎麼能實現它

+1

「呼籲使用父對象子法」 不健全,相當OO。在你的例子中,我也看不到你想要調用哪種方法? – Jacques

+0

你想要做什麼?哪個孩子的方法?哪一種父母方法? –

+0

我想訪問任何重寫的方法像Rectangle,Cirlce任何一個,但使用形狀對象像在C#中,我們可以做什麼:Shape shape = new Circle() shape.draw();它會調用子類的overriden方法。我想在java腳本中做同樣的事情,我該如何實現它。 –

回答

0

如果您正在使用的Shape任何子類在你的代碼(你可以在與instanceof操作運行時檢查),你可以簡單地調用該方法。 Js運行時會自動從原型鏈調用正確的方法。所以,如果你在代碼的對象稱爲myshape,您可以:

if(myshape instanceof Shape){

// invoke draw method 
    myshape.draw(); 
} 
0

var Shape = function() { } 
 
    Shape.prototype.draw = function() { 
 
     return "Generic shape called "; 
 
    } 
 
    Shape.prototype.val = 10; 
 

 
    var Circle = function() { } 
 
    Circle.prototype = Object.create(Shape.prototype); 
 
    Circle.prototype.draw = function() { 
 
     return "I am from Cirlce"; 
 
    } 
 

 
    var Rectangle = function() { } 
 
    Rectangle.prototype = Object.create(Shape.prototype); 
 
    Rectangle.prototype.draw = function() { 
 
     return "I am from Rectangle"; 
 
    } 
 

 
    var Triangle = function() { } 
 
    Triangle.prototype = Object.create(Shape.prototype); 
 
    Triangle.prototype.draw = function() { 
 
     return "I am from Triangle"; 
 
    } 
 
     
 
    //Using Up casting (access value of parent object) 
 
    var newCircle = new Circle(); 
 
    alert("newCircle: "+newCircle.draw()+" : "+newCircle.val);

相關問題