2016-07-17 4 views
0

Работа для понимания нового синтаксиса ES6. Если у меня есть класс, например, библиотека Outlayer, которая не написана на ES6, но хотите расширить ее с помощью класса ES6, как бы это выглядело? Точка расширения ключа - _getItemLayoutPositionрасширить объект ES6

Я пробовал что-то вроде этого.

export let MyGrid = Outlayer.create('AnyGrid', {}); 

MyGrid._getItemLayoutPosition = function() { 
    // this does not get called 
} 

Если я new MyGrid(element)

Мой расширенный _getItemLayoutPosition никогда не вызывается.

Тогда я подумал, что мне нужно расширить класс

export class AnyGrid extends Outlayer { 
    _getItemLayoutPosition(item) { 
    return { 
     x: 0, 
     y: 0 
    } 
    } 
} 

Это дает ошибку Type 'typeof 'Outlayer'' is not a constructor function type.

Что такое правильный способ расширить этот класс, так что я могу переопределить метод _getItemLayoutPosition?

ответ

0

Поскольку Outlayer.create фактически создает функцию, которая наследуется от Outlayer вы должны добавить метод на прототипе вместо функции самого

export let MyGrid = Outlayer.create('AnyGrid', {}); 

MyGrid.prototype._getItemLayoutPosition = function() { 
    // this does not get called 
} 

Заметим, что функция возвращается при вызове Outlayer.createhas additional properties т.е. не то же самое как создание класса, который наследуется от Outlayer

+0

argh Я думал, что пробовал и так, но прототип не был определен! – Mike

0

Пожалуйста, попробуйте следующее:

// AnyGrid- subclass 
function AnyGrid() { 
    Outlayer.apply(this, arguments); // call super constructor. 
} 

// subclass extends superclass 
AnyGrid.prototype = Object.create(Outlayer.prototype); 
AnyGrid.prototype.constructor = AnyGrid; 

//Add/Override the method 
AnyGrid.prototype._getItemLayoutPosition = function() { 
    // this does not get called 
} 

Не забудьте экспортировать AnyGrid.

+0

Это дает пару ошибок. '' Свойство 'prototype' не существует в типе 'typeof' Outlayer ''. '' 'и' '' Property 'apply' не существует на type 'typeof' Outlayer''''. Тогда что-то не так с экспортом '' 'Декларация или заявление ожидается .''' – Mike

+0

Проведите вас с помощью браузера? –

+0

Дело в том, что вам нужно загрузить/потребовать «Outlayer». –