我已经能够使javascript intellisense正确地为这样定义的'class'原型工作:
function GetCustomerList()
{
}
GetCustomerList.prototype =
{
HEADER: {
RETURN_CODE: 0,
RETURN_MESSAGE: "",
}
,
NUM_RECORDS: 0,
START_RECORD: 0,
END_RECORD: 0
};
我可以输入类似的内容:
var req = new GetCustomerList();
req.HEADER.RETURN_CODE = 100;
Visual Studio的intellisense知道HEADER属性,以及它自己的名为'RETURN_CODE'和'RETURN_MESSAGE'的属性。我能做到:
req.NUM_RECORDS = 50;
智能感知工作完美。
因此intellisense适用于复杂的嵌套类型 - 很棒。但是,是否可以通过一系列复杂类型获得智能感知?
示例:
function Customer()
Customer.prototype = {
NAME: "",
ADDRESS: "",
ID: 0
};
function GetCustomerList()
{
}
GetCustomerList.prototype =
{
HEADER: {
RETURN_CODE: 0,
RETURN_MESSAGE: "",
}
,
NUM_RECORDS: 0,
START_RECORD: 0,
END_RECORD: 0,
CUSTOMERS: [ new CUSTOMER() ]
};
我有一个'CUSTOMER'类型的数组,我也为它定义了一个原型。我希望能够输入以下内容:
req.CUSTOMER[ 0 ].NAME
并且intellisense提示我“NAME”是可用于此阵列的属性。
这可能吗?
答案 0 :(得分:3)
<强>更新强>
正如您已经注意到的,IntelliSense可以很好地适用于您的复杂类型,但不适用于Array。即使您创建了一个像String这样的内部类型数组,它仍然无效。
我已经彻底研究过这个话题,理论上说这应该是可能的,但事实并非如此 作为测试,创建javascript文件名称 “customers.js ”并包含以下内容:
function Customer() {
/// <summary>This is my custom intellisense for the Customer type</summary>
///<field name="NAME" type="String">The Customer's name</field>
///<field name="ADDRESS" type="String">The customer's address</field>
///<field name="ID" type="String">The ID number</field>
}
Customer.prototype = {
NAME: "",
ADDRESS: "",
ID: 0
};
function CustomerList() {
/// <summary>The List of Customers</summary>
///<field name="HEADER" type="String">The header</field>
///<field name="CUSTOMERS" type="Array" elementType="Customer" >The list of customers in an Array</field>
}
CustomerList.prototype =
{
HEADER: {
RETURN_CODE: 0,
RETURN_MESSAGE: ""
},
NUM_RECORDS: 0,
START_RECORD: 0,
END_RECORD: 0,
CUSTOMERS: [new Customer()]
};
然后在<script src="customers.js"/>
或
/// <reference path="customer.js" />
在另一个JS文件中。
了解intellisense如何正确显示摘要,但是当涉及数组时,什么都没有。
var custList = new CustomerList();
custList.CUSTOMERS // intellisense
custList.CUSTOMERS[0] // no intellisense as you already know
答案 1 :(得分:0)
没有办法在VS2008中使用它。它将在VS的下一个版本中运行。
答案 2 :(得分:0)
虽然VS不支持,但您可能需要考虑以下解决方法。
我将示例脚本更改为:
function Customer(obj) {
/// <summary>This is my custom intellisense for the Customer type</summary>
///<field name="NAME" type="String">The Customer's name</field>
///<field name="ADDRESS" type="String">The customer's address</field>
///<field name="ID" type="String">The ID number</field>
if (obj) return obj;
}
Customer.prototype = {
NAME: '',
ADDRESS: '',
ID: 0
};
function CustomerList() {
/// <summary>The List of Customers</summary>
///<field name="HEADER" type="String">The header</field>
///<field name="CUSTOMERS" type="Array" elementType="Customer" >The list of customers in an Array</field>
}
CustomerList.prototype =
{
HEADER: {
RETURN_CODE: 0,
RETURN_MESSAGE: ''
},
CUSTOMERS: []
};
(注意构造函数的更改 - 不确定intellisense的XML注释)。
然后你可以这样引用它(使用intellisense):
var list = new CustomerList();
var cust = new Customer();
cust.NAME = 'john';
list.CUSTOMERS.push(cust);
var cust1 = new Customer(list.CUSTOMERS[0]);
alert(cust1.NAME);
var cust2 = new Customer({ NAME: 'Mark' });
alert(cust2.NAME);
反对这一点的论点是你需要构造函数中的参数。