Я хочу, чтобы мое расширение текущего класса в Node.js добавило к нему свойство promise
:
import { spawn } from 'child_process'
const cp = spawn('echo', ['hello world'])
cp.promise = new Promise((r, j) => cp.on('exit', r).on('error', j))
Однако свойство promise
не будет выбрано в среде IDE для предложенийи автозаполнение.
Если я создаю класс и расширяю прототип объекта, который получаю при получении исходного экземпляра, среда IDE будет работать нормально:
class ChildProcessWithPromise extends ChildProcess {
constructor(p, promise) {
super()
this._promise = promise
Object.assign(this, p)
}
/**
* @type {Promise.<PromiseResult>} The promise resolved when the process exits.
*/
get promise() {
return this._promise
}
}
Есть ли опасностиделать это так, чтобы в какой-то момент один из методов получил доступ к старому this
?Я проверил его с помощью этой настройки, и он, кажется, работает ОК:
const { EventEmitter } = require('events')
class Test extends EventEmitter {
constructor(n, t) {
super()
this._n = n
if (t) Object.assign(t)
}
run() {
this.emit('data', this._n)
}
}
const t = new Test(1)
t.on('data', d => console.log('t %s', d))
const t2 = new Test(2, t)
t2.on('data', d => console.log('t2 %s', d))
t.run()
t2.run()
Результат (правильный):
t 1
t2 2
Однако я хочу посмотреть, может ли кто-нибудь придумать ситуациючто может привести к неожиданному поведению.Что-то строка, когда функция была связана внутри метода.