2016-02-26 3 views
2

Предположим, у меня есть два класса, один из которых называется Rectangle и один называется Circle. Оба класса имеют значения X и Y, существует ли способ определить переменные и функции один раз для обоих классов? Прочитайте приведенный ниже код, если он объясняет это лучше:Функции совместного использования классов Javascript?

function Rectangle(msg, font){ 
    this.msg = msg; 
    this.font = font; 
} 

function Circle(radius){ 
    this.radius = radius; 
} 

Rectangle && Circle { 

/* had no idea how to write the line above, 
but basically for both the rectangle and the circle, 
there is this code so I don't have to rewrite it for both.*/ 

    this.position = function(x, y){ 
     this.x = x; 
     this.y = y; 
    } 
} 
+2

Просто создайте функцию и назначьте ее свойствам на прототипах. – Pointy

+2

Похоже, вы хотите, чтобы базовый объект называл нечто вроде «Shape», которое «Rectangle» и «Circle» могли наследовать и, таким образом, совместно использовать одну реализацию некоторых общих свойств и/или методов. Я бы посоветовал вам прочитать о наследовании Javascript. – jfriend00

+0

Спасибо за помощь! – Jerry

ответ

4

Да, есть:

//creating class shape 
function Shape(x,y){ 
    this.x = x; 
    this.y = y; 
}; 
//set position function 
Shape.prototype.position = function(x,y){ 
    this.x = x; 
    this.y = y;   
}; 

function Rectangle(msg,font,x,y){ 
    //calling object Shape 
    Shape.call(this,x,y); 
    this.msg = msg; 
    this.font = font; 
} 
//inheriting object Shape 
Rectangle.prototype=Object.create(Shape.prototype); 

function Circle(radius,x,y){ 
    //calling object Shape 
    Shape.call(this,x,y); 
    this.radius = radius; 
} 
//inheriting object Shape 
Circle.prototype=Object.create(Shape.prototype); 

Теперь вы можете вызвать любую функцию, определенную в форму от объекта Rectangle или Circle. Надеюсь это поможет.

+1

Отличный ответ. Спасибо, Итан! – Jerry

+0

Добро пожаловать, рад, что смогу помочь. –

Смежные вопросы