Добавление конструктора в внедренный класс проекта - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь добавить конструктор, который я называю ctor, к Project, поэтому я могу добавить к нему некоторые свойства, когда он будет создан.

Вот(абсолютно ужасный) хак, который я использую на Item, чтобы сделать этот тик:

const canvas = document.querySelector('canvas')
paper.setup(canvas)

paper.Item.inject({
  ctor: function(args) {
    console.log('Item constructed!')
  }
})

// All Items are supposed to call `_initialize` so we "hook" there.
const Item_initialize = paper.Item.prototype._initialize
const Item_ctor = paper.Item.prototype.ctor

paper.Item.prototype._initialize = function(...args) {
  const initializer = Item_initialize.apply(this, args)
  if (Item_ctor) Item_ctor.apply(this)

  return initializer
}

const path = new paper.Path.Line({
  strokeColor: 'black',
  strokeWidth: 5,
  from: 100,
  to: 50
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.12.0/paper-core.js"></script>
<canvas></canvas>

К сожалению, описанный выше трюк не работает на Project:

const canvas = document.querySelector('canvas')
paper.setup(canvas)

paper.Project.inject({
  ctor: function(args) {
    // Not called
    console.log('Project constructed!')
  }
})

const Project_initialize = paper.Project.prototype._initialize
const Project_ctor = paper.Project.prototype.ctor

paper.Project.prototype._initialize = function(...args) {
  const initializer = Project_initialize.apply(this, args)
  if (Project_ctor) Project_ctor.apply(this)

  return initializer
}

const project = new paper.Project(canvas)
<script src="https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.12.0/paper-core.js"></script>
<canvas></canvas>

Чего мне здесь не хватает?

...