12

我创建了以下 javascript 对象:

var Content = Content || {};

// Constructor defines properties and inits object
Content.ProductManager = function () {
    // ...
};


Content.ProductManager.prototype = function () {

    // 
    // private members
    // 


    var setProductAsPreviewed = function (args) {
        // code omitted for brevity
        // ....
    };


    //
    // public members
    // 

    return {
        setProductAsPreviewed: setProductAsPreviewed
    };

} (); 

传递给的对象setProductAsPreviewed具有以下属性:

args = {
    productId: int,
    productName: string,
    updateDate: date,
    saveItems: bool
};

我想包含 XML 注释,这样我就可以获得传递给函数的参数的智能感知setProductAsPreviewed

var productManager = new window.Content.ProductManager();
// show intellisense when typing the following:
productManager.setProductAsPreviewed( 

这个线程展示了如何为简单的 args ( string, int, ...) 做这件事,但是如何为一个复杂的对象做这件事呢?我正在使用 Visual Studio 2010。

4

2 回答 2

21

据我所知,如果将泛型变量用作参数,您无法告诉 IntelliSense 哪些字段和方法位于泛型变量上。

如果变量是一个数组,你可以这样定义它:

function funcWithArrayArg(arrayArg) {
    /// <param name="arrayArg" type="Array" elementType="Number">An array of numbers</param>
}

在 VS2012 中,您也可以注释对象,就像这样(您可以在用作对象构造函数的函数上注释字段,如下所示,但文档对这样的匿名对象只字未提):

var args = {
    /// <field type="Number">Product ID</field>
    productID: int
};

这些方法都没有真正做到你想要的,因为第二种方法不会给你函数参数的智能感知,而且你无论如何都在使用 VS2010。

我认为你最好的选择是定义一个自定义对象作为该函数的参数对象,毕竟如果你想创建一个自定义对象作为带有智能感知的参数,那么在其他语言中你就是这样做的。它可能看起来像这样:

function ProductPreviewArgs(productId, productName, updateDate, saveItems) {
    /// <summary>Creates an object for use as the sole argument to the setProductAsPreviewed function</summary>
    /// <param name="productId" type="Number" optional="false">The Product ID</param>
    /// <param name="productName" type="String" optional="false">The Product Name</param>
    /// <param name="updateDate" type="Date" optional="false">The date the product was last updated</param>
    /// <param name="saveItems" type="Boolean" optional="false">Specifies whether or not to save the items</param>
    /// <returns type="ProductPreviewArgs">An object intended for use as the sole argument to the setProductAsPreviewed function</returns>
    /// <field name="productId" type="Number">The Product ID</field>
    /// <field name="productName" type="String">The Product Name</field>
    /// <field name="updateDate" type="Date">The date the product was last updated</field>
    /// <field name="saveItems" type="Boolean">Specifies whether or not to save the items</field>
    this.productId = productId;
    this.productName = productName;
    this.updateDate = updateDate;
    this.saveItems = saveItems;
}

您将在此处获得对象的智能感知(这将显示您在元素中放入的returns内容):

setProductAsPreviewed(

如果您随后决定创建一个新对象,您将在此处获得 IntelliSense(它会在您添加它们时一一显示每个参数的描述):

setProductAsPreviewed(new ProductPreviewArgs(

我不完全确定元素type上的属性是否returns真的会像这样工作,它在 VS2012 中确实如此,正如您现在可能已经预料到的那样,文档在这个主题上令人讨厌;而且我现在没有 VS2010 的副本来测试这些。

于 2013-05-30T15:09:55.483 回答
6

您可以创建一个单独的 IntelliSense 文件,看起来像这样

intellisense.annotate(Content, {
  'setProductAsPreviewed ': function() {
    /// <signature>
    ///   <summary>Summary<summary>
    ///   <param name="args" type="ComplexObject">some text here
    /// </signature>
   }
})

我相信这应该进行一些修改

于 2013-06-05T20:33:06.293 回答