JavaScript intellisense в Visual Studio только частично работает

Я вижу странное поведение с JavaScript intellisense в Visual Studio 2013 Express для Web. Я следовал всем советам, которые мог найти в Google, и он почти идеально работает... но что-то, связанное с нахождением внутри или снаружи функции, похоже, влияет на это. Я очень плохо знаком с JavaScript, поэтому я мог что-то упустить, но для меня это не имеет никакого смысла:

Вне функции это, кажется, работает частично...(Я получаю один уровень intellisense)

(но не два)

Но внутри функции это работает отлично...(Я получаю все intellisense)

В отдельном файле я получаю аналогичную проблему, но ниже одного уровня функции...(ограничено здесь)

(но все здесь)

Любые советы будут высоко ценится!

1 ответ

Хорошо, я просмотрел код, вот что я думаю.

В Phaser.Game у вас есть этот код

/**
* @property {Phaser.GameObjectFactory} add - Reference to the Phaser.GameObjectFactory.
*/
this.add = null;

Поскольку изначально для него установлено значение null, я предполагаю, что Visual Studio не сможет определить, какой будет тип "add", поскольку он определяется только во время выполнения.

Если add(...) был определен как Phaser.Game.prototype.add = function() { ... } или даже внутри функции, использующей this.add = function() { ... } Я думаю, вы бы это увидели в intellisense (это обычно, как классы строятся в Javascript). Однако я заметил, что вы определяете это динамически позже в коде, подобном этому, с фабрики:

this.add = new Phaser.GameObjectFactory(this);

Visual Studio недостаточно умен, чтобы знать, что это определение add(...), которое следует использовать для intellisense.

Во втором примере игра передается в качестве аргумента, и Visual Studio недостаточно умна, чтобы понять, какой это будет тип. Поскольку Javascript имеет слабую типизацию, аргумент может быть Game, но также может быть целым, логическим или что-либо еще в этом отношении.