【问题标题】:How do you get VS 2008 Javascript Intellisense working for complex prototypes?你如何让 VS 2008 Javascript Intellisense 为复杂的原型工作?
【发布时间】:2009-04-17 17:47:31
【问题描述】:

对于这样定义的“类”原型,我已经能够让 javascript intellisense 正常工作:

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 的智能感知知道 HEADER 属性,以及它自己的名为“RETURN_CODE”和“RETURN_MESSAGE”的属性。我能做到:

req.NUM_RECORDS = 50;

智能感知完美运行。

所以智能感知适用于复杂的嵌套类型 - 很棒。但是,是否有可能获得具有复杂类型数组的智能感知?

例子:

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() ]
};

我有一个“客户”类型的数组,我还为其定义了一个原型。我希望能够输入以下内容:

req.CUSTOMER[ 0 ].NAME 

并让智能感知提示我“NAME”是此数组可用的属性。

这可能吗?

【问题讨论】:

  • 编辑问题而不是重复发布。
  • 将重复标记为删除。这个问题有更多细节,应该留下来。请取消标记为“完全重复”
  • 请查看我的更新答案

标签: javascript visual-studio-2008 intellisense


【解决方案1】:

更新:

正如您已经注意到的,IntelliSense 适用于您的复杂类型,但不适用于数组。即使你创建了一个像 String 这样的内部类型数组,它仍然不起作用。

我已经彻底研究过这个话题,理论上这应该是可能的,但事实并非如此。
作为测试,创建一个名为 "customers.js" 的 javascript 文件并包含以下内容:

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()]
};

然后在&lt;script src="customers.js"/&gt;里面引用这个文件

/// &lt;reference path="customer.js" /&gt; 在另一个 JS 文件中。

查看智能感知如何正确显示摘要,但当涉及到数组时,什么都没有。

var custList = new CustomerList();

custList.CUSTOMERS // intellisense
custList.CUSTOMERS[0] // no intellisense as you already know

【讨论】:

  • 其实和那个帖子完全不一样。那篇文章涉及让智能感知完全与 VS 的配置一起工作。这涉及利用智能感知所需的实际语法。
【解决方案2】:

没有办法让它在 VS2008 中工作。它将在下一个版本的 VS 中工作。

【讨论】:

    【解决方案3】:

    虽然 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: []
    }; 
    

    (注意构造函数的变化——不确定智能感知的 XML 注释)。

    然后你可以像这样引用它(使用智能感知):

    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);
    

    反对这一点的论点是你需要在构造函数中的参数。

    【讨论】:

    • 如果VS不支持,这能解决问题吗? (我不是投反对票,只是问)
    猜你喜欢
    • 1970-01-01
    • 2019-07-05
    • 2011-05-05
    • 2010-09-07
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多