3

コントロールの最初のオプションを選択したいので、次のように書きます。

$("#MySelect").val($("#MySelect option:first").val());

次に、以下をコピーしてGoogle クロージャー コンパイラに貼り付けます。

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// @externs_url http://closure-compiler.googlecode.com/svn/trunk/contrib/externs/jquery-1.7.js
// ==/ClosureCompiler==

$("#MySelect").val($("#MySelect option:first").val());

次のエラーが表示されます。

ここに画像の説明を入力

コンパイラが不平を言っている理由がわかりません! どうしたの?

ご提案いただきありがとうございます。

4

2 に答える 2

1

jQuery メソッドの多くは、入力パラメーターの数と型に基づいてさまざまな型を返します。この動作は、従来の言語での関数のオーバーロードに似ています。ただし、JavaScript は従来の関数のオーバーロードをサポートしておらず、jQuery は関数の引数を調べることで動作を模倣しています。

の場合.val、関数のオーバーロードがサポートされている場合、メソッドにどのように注釈が付けられるかを次に示します。

/** @return {number|string|Array.<string>} */
jQuery.prototype.val = function() {};

/**
 * @param {number|string|Array.<string>|function(number, *)} newVal
 * @return {!jQuery}
 */
jQuery.prototype.val = function(newVal) {};

関数のオーバーロードがないため、 の実際のシグネチャ.valは両方の用途を組み合わせたものになります。

/**
 * @param {(number|string|Array.<string>|function(number, *))=} newVal
 * @return {!jQuery|number|string|Array.<string>|function(number, *)}
 */
jQuery.prototype.val = function(newVal) {};

このため、 の戻り値を.valへの別の呼び出しの入力として使用する.val場合は、元の戻り値を型キャストして、予想される使用方法を指定する必要があります。

$("#MySelect").val(
    /** @type {number|string|Array.<string>} */
    ($("#MySelect option:first").val()) //note the extra parens
);

この動作は、jQuery externs ファイルの上部にあるコメントで説明されています: http://code.google.com/p/closure-compiler/source/browse/trunk/contrib/externs/jquery-1.7.js#20

于 2012-08-13T13:22:30.177 に答える
1
于 2012-08-10T21:19:10.927 に答える