Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ООП наследование. Как получить доступ к методам родителя? (https://javascript.ru/forum/misc/43391-oop-nasledovanie-kak-poluchit-dostup-k-metodam-roditelya.html)

ShuggyBumblebee 03.12.2013 22:08

ООП наследование. Как получить доступ к методам родителя?
 
У меня уже мозг на бикрень от этого JS).
Как получить доступ к методам родителя?
function MotionVector(){
				this.e,
				this.int    = 30,
				this.startX = 0, 
				this.startY = 0,
				this.coordX = [0, this.int],
				this.coordY = [0, this.int],
				this.flag 	= true;
		}
		
		MotionVector.prototype = {
				constructor		: MotionVector,	
				getVectorByX 	: function(){
						return this.coordX;	
				},
				getVectorByY 	: function(){
						return this.coordY;	
				},
				computation		: function(event){
						this.e = event;
						if(this.flag){	
								this.flag = false;
								this.startX = this.e.pageX; 
								this.startY = this.e.pageY;
								setTimeout(this.endControl.bind(this), this.int);
						}
				},
				endControl	    : function(){
						this.coordX[0] = this.e.pageX - this.startX;
						this.coordY[0] = this.e.pageY - this.startY;
						this.flag = true;
				}
		}

наследник
function MotionVectorX() {
        MotionVector.call(this);
    }

    MotionVectorX.prototype = new MotionVector();
    MotionVectorX.prototype = {
        endControl: function () {
            this.coordX[0] = this.e.pageX - this.startX;
            this.flag = true;
        }

    }
    MotionVectorX.superclass.computation.call(this, event);
    MotionVectorX.superclass.getVectorByX.call(this);

метод endControl я переписал, но мне нужны еще не переписанные методы родителя(computation, getVectorByX), как их достать?

BallsShaped 03.12.2013 22:23

Во-первых, это:
MotionVectorX.prototype = new MotionVector();
MotionVectorX.prototype = {

неправильно.
Надо так:
MotionVectorX.prototype = Object.create(MotionVector.prototype);
MotionVectorX.prototype.endControl = function () {
    this.coordX[0] = this.e.pageX - this.startX;
    this.flag = true;
};

Во-вторых, просто укажи ручками свойство superclass:
MotionVectorX.superclass = MotionVector.prototype;

ShuggyBumblebee 03.12.2013 22:36

о отлично, работает))) спасибо

Maxmaxmaximus3 03.12.2013 23:02

не забудь call(this) и apply(this) делать для методов, а не просто вызывать

danik.js 04.12.2013 00:27

Цитата:

Сообщение от BallsShaped
Надо так:

Тогда уж так:

MotionVectorX.prototype = Object.create(MotionVector.prototype, {
    constructor: {value: MotionVectorX}
});

Maxmaxmaximus3 04.12.2013 00:44

а вот так слабо)?


<script src="//mychamber.ru/build/ui.js"></script>


<div controller="FRP">
  <button click="a++">add</button>
  {a} + {b} = {c}
</div>


<script>
  function FRP() {
    a = 1
    b = 2
    c = (a + b)
  }
</script>


Часовой пояс GMT +3, время: 07:13.