Метод доступа из класса в компоненте реакции - PullRequest
0 голосов
/ 20 мая 2018

У меня есть свой model.js вот так:

export class Piece {
constructor(name, coordinate) {
    this.name = name;
    this.coordinate = coordinate;
    this.move = false;
  }
  init(){
    // some stuff
  }
  hasOne(){
    // some stuff
  }
}

export class Brick {
  constructor(name, level) {
    this.name = name;
    this.level = level;
  }
  getScore(level){
    // some stuff
  }
}

export class Dashboard {
  constructor(){
    this.start();
  }

  start(){
    this.firstPiece = new Piece('A', 5);
  }

}

...

, и у меня есть компонентная панель инструментов

import * as Model from './model';
<Dashboard game={new Model.Dashboard()} />

и кусок

import React from 'react';
const Piece = (props) => {
  console.log(props)
  return(
    <div>
      {props.piece.init()}
    </div>
  );
};
export default Piece;

Когда я console.log (props), я вижу только конструктор props, у меня нет доступа к методам init (), только с proto

{props.piece.__proto__.init()}

Есть ли способ получить доступ к методу в реквизите, не проходя мимо proto ?

1 Ответ

0 голосов
/ 20 мая 2018

JavaScript использует наследование прототипа , а классы ES6 являются синтаксическим сахаром для установленного рецепта наследования.

Понимание наследования прототипа необходимо для эффективной разработки JavaScript.

piece прототипически наследует init от Piece класса, piece.__proto__ === Piece.prototype.__proto__ - это нестандартное свойство, которое используется внутри и не должно использоваться напрямую.

Из-за того, как работает наследование, piece.init === piece.__proto__.init, если оно не было затенено.Ожидается, что метод будет использоваться как {props.piece.init()} без проблем.

...