3

次のように定義された「クラス」プロトタイプに対して、JavaScriptインテリセンスを正しく機能させることができました。

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

プロトタイプも定義した「CUSTOMER」タイプの配列がある場合。次のような入力ができるようにしたいと思います。

req.CUSTOMER[ 0 ].NAME 

そして、インテリセンスは、「NAME」がこの配列で使用可能なプロパティであることを私に促します。

これは可能ですか?

4

3 に答える 3

3

アップデート:

既にお気づきのように、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()]
};

次に、このファイルを内部で参照します<script src="customers.js"/>

または /// <reference path="customer.js" />別のJSファイル内。

インテリセンスが集計を正しく表示する方法を確認しますが、配列に関しては何も表示されません。

var custList = new CustomerList();

custList.CUSTOMERS // intellisense
custList.CUSTOMERS[0] // no intellisense as you already know
于 2009-04-21T14:43:26.403 に答える
0

これを VS2008 で機能させる方法はありません。VS の次のバージョンで動作します。

于 2009-05-15T00:23:54.777 に答える
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: []
}; 

(コンストラクターの変更に注意してください-インテリセンスの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);

これに対する議論は、コンストラクターでパラメーターが必要であるということです。

于 2010-10-06T02:24:51.187 に答える