Создать функцию JavaScript, которая работает с IntelliSense

Я хочу воспользоваться Visual Studio Intellisense, поэтому я прочитал:

http://msdn.microsoft.com/en-us/library/bb514138.aspx

В любом случае, почему я не получаю intellisense с:

function Customer() {
    this.Id = 0;
    this.FirstName = "";
    this.LastName = "";
}

function Test() {
    /// <returns type="Customer"></returns>

    var c = new Object();
    $.ajax({
        async: false,
        dataType: "json",
        url: "Ajax/GetCustomer.aspx",
        success: function (foundCustomer) {
            // I know that found customer is of type Customer
            c = foundCustomer;
        }
    });

    return c;
}

var x = Test();
x. // No intellicense! why?

Как я могу сказать Visual Studio, что функция собирается вернуть объект TYPE? Customer? Например, если я заменю функцию Test для: function Test(){ return new Customer(); } тогда intellicense будет работать.


редактировать

Моя цель в конце состоит в том, чтобы иметь что-то вроде:

function Customer() {
    this.Id = 0;
    this.FirstName = "";
    this.LastName = "";
}

Object.prototype.CastToCustomer = function(){
    /// <returns type="Customer"></returns>
    return this;
}

$.ajax({
    async: false,
    dataType: "json",
    url: "Ajax/GetCustomer.aspx",
    success: function (foundCustomer) {

        foundCustomer = foundCustomer.CastToCustomer();
        foundCustomer.// Intellicense does not work :(
    }
});

Я получаю много json-объектов, и я хотел бы привести их с помощью вспомогательных функций.


Временное решение:

Это то, что я в итоге сделал:

function Customer() {
    this.Id = 0;
    this.FirstName = "";
    this.LastName = "";
}

$.ajax({
    async: false,
    dataType: "json",
    url: "Ajax/GetCustomer.aspx",
    success: function (foundCustomer) {
        // this will never be true on real browser. It is always true in visual studio (visual studio will now think that found customer is of type Customer ;)
        if (document.URL.length == 0) foundCustomer = new Customer();

        foundCustomer.// Intellisense works!!!!
    }
});

2 ответа

Решение

Вы инициализируете возвращаемое значение в Object так что именно на этом основан Intellisense. Если вы инициализируете его пустым Customerто Intellisense обнаружит, что оно возвращает Customer

function Test() {

    var c = new Customer(); //only for Intellisense

    $.ajax({...});

    return c;
}

Test(). //Customer members now appear

Вы также можете использовать /// <param /> чтобы указать тип параметра:

$.ajax({
    ...

        success: function (foundCustomer) {
           /// <param name='foundCustomer' type='Customer' />
           foundCustomer. //Customer members appear            
        }
});

Наконец, ваш document.URL.length Трюк также можно использовать в методе литья:

Object.prototype.CastToCustomer = function() {

  var c = new Customer();
  if (document.URL.length) c = this;
  return c;

}

Если вы измените функцию Customer для принятия аргументов:

function Customer(opts) {
    var opts = opts || {};

    this.id = 0;
    this.firstName = '';
    this.lastName = '';

    for (var i in opts) {
        if (opts.hasOwnProperty(i)) this[i] = opts[i];
    }
}

Тогда внутри вашего Test функция, изменение c = foundCustomer в c = new Customer(foundCustomer), Я предполагаю, что это может вызвать intellicense?

Другие вопросы по тегам