我创建了以下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
的参数的intellisense:
var productManager = new window.Content.ProductManager();
// show intellisense when typing the following:
productManager.setProductAsPreviewed(
This thread显示了如何为简单的args(string
,int
,...)执行此操作,但如何为复杂对象执行此操作?我正在使用Visual Studio 2010。
答案 0 :(得分:21)
据我所知,如果将IntelliSense用作参数,则无法告诉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的副本来测试任何一个。
答案 1 :(得分:6)
您可以创建一个单独的IntelliSense文件,看起来像这样
intellisense.annotate(Content, {
'setProductAsPreviewed ': function() {
/// <signature>
/// <summary>Summary<summary>
/// <param name="args" type="ComplexObject">some text here
/// </signature>
}
})
我相信这应该可以进行一些修改