Код Visual Studio: используйте «перейти к определению» для методов, которые были добавлены в прототип вручную - PullRequest
0 голосов
/ 22 октября 2018

Мне действительно нравится функция перехода к определению (alt + click) в коде Visual Studio.Проблема в том, что он не работает с функциями, которые были добавлены в некоторый класс с помощью Object.assign или аналогичным способом.Например:

const DigestiveBehavior = require('./DigestiveBehavior');
const Animal = require('./Animal');

class Dog extends Animal{
constructor(name){
    super();
    this.name = name;
    Object.assign(Dog.prototype,DigestiveBehavior.prototype)//I use 
     "composition" here to give Dog additional functionality.
  }
}

Это "черта" Dig жидкостного поведения, которую использует Собака:

function DigestiveBehavior(){

}

 DigestiveBehavior.prototype={
  eat:function(){
     console.log(this.name,' eating!');
    }
 }

Это код, который его использует:

 const dog = new Dog('good doggie');
 dog.eat(); 

OfКонечно, все это работает, но Visual Code не распознает источник определения метода dog.eat (), когда я щелкаю по нему alt +, поскольку он не определен в классе.Есть ли какой-нибудь плагин или обходной путь, чтобы сделать это в IDE?

1 Ответ

0 голосов
/ 23 октября 2018

Этот код не является композицией:

class Dog extends Animal{
    constructor(name){
        super();
        this.name = name;
        Object.assign(Dog.prototype,DigestiveBehavior.prototype)//I use 
         //"composition" here to give Dog additional functionality.
    }
}

В основном то, что вы делаете здесь, это «вручную»:

class Dog extends Animal  {
    Bark(): void {}
}

Приведенный выше код должен иметь тот же результат,Однако в IDE узнают о методах «Животное»

...