Как я могу передать значение из дочернего класса в родительский класс в JavaScript

#javascript #oop

Вопрос:

Я создаю один родительский класс и два дочерних класса.У каждого из двух дочерних классов есть метод вычисления значения площади.

Всякий раз, когда я звоню a7.areaPrint() . Это показывает мне undefined . Но я могу получить результат с помощью c7.calculate() amp;amp; s7.calculate() в консоли.

Как я могу передать эти два значения области в родительский класс и распечатать их?

c7.calculate() amp;amp; s7.calculate() будет напечатано в родительском классе.

 function myExtend(Parent, Child) {
    Child.prototype = Object.create(Parent.prototype)
    Parent.prototype.constructor = Parent
}

function Area(circleArea, squareArea) {
    this.areaPrint = function () {
        console.log("The Circle area is: "   Circle.call(this, circleArea))
        console.log("The Square area is: "   Square.call(this, squareArea))
    }
}
function Circle(r) {
    this.radius = r
    this.calculate = function () {
        var circleArea = (Math.PI * Math.sqrt(this.radius, 2)).toFixed(2)
        return circleArea;
    }
}

function Square(s) {
    this.side = s
    this.calculate = function () {
        var squareArea = (Math.sqrt(this.side, 2)).toFixed(2)
        return squareArea;
    }
}

//Create Prototype(Area > Circle)
myExtend(Area, Circle)

//Prototype Member
Circle.prototype.perimeter = function (D) {
    return (Math.PI * D).toFixed(2)
}

//Create Prototype(Area > Square)
myExtend(Area, Circle)


var c7 = new Circle(5)
var s7 = new Square(5)
var a7 = new Area()

console.log()

a7.areaPrint() 

Комментарии:

1. @mplungjan я использую Circle.call(this, circleArea) в areaPrint()

Ответ №1:

Не уверен, что понимаю ваш вопрос. Насколько я понимаю, это нужно исправить, вам нужно передать аргументы в строке var a7 = new Area() -> > var a7 = new Area(c7, s7) и в области вычислить код из Circle.call(this, circleArea) вызова функции circleArea.calculate() .

 function myExtend(Parent, Child) {
  Child.prototype = Object.create(Parent.prototype)
  Parent.prototype.constructor = Parent
}

function Area(circleArea, squareArea) {
  this.areaPrint = function() {
    console.log("The Circle area is: "   circleArea.calculate());
    console.log("The Square area is: "   squareArea.calculate());
  }
}

function Circle(r) {
  this.radius = r
  this.calculate = function() {
    var circleArea = (Math.PI * Math.sqrt(this.radius, 2)).toFixed(2)
    return circleArea;
  }
}

function Square(s) {
  this.side = s
  this.calculate = function() {
    var squareArea = (Math.sqrt(this.side, 2)).toFixed(2)
    return squareArea;
  }
}

//Create Prototype(Area > Circle)
myExtend(Area, Circle)

//Prototype Member
Circle.prototype.perimeter = function(D) {
  return (Math.PI * D).toFixed(2)
}

//Create Prototype(Area > Square)
myExtend(Area, Square)


var c7 = new Circle(5)
var s7 = new Square(5)
var a7 = new Area(c7, s7)

console.log()

a7.areaPrint(); 

Комментарии:

1. Это работает! Спасибо.. У меня есть вопрос, является ли это динамической функцией ?