1

jQuery を 1 年間使用していますが、このコードがどのように機能するのかまだわかりません。

alert($('#elementID').val()); // It gets the value of element

$('#elementID').val('setting Value'); // the same function is setting value

jqueryの他のいくつかの機能も同じように行います.html()

このことがどのように達成されるか知りたいですか?javascript 関数をどのようにオーバーロードしますか?

4

5 に答える 5

8

JavaScript にはオーバーロードがないため、このような機能はオプションのパラメーターを使用して実行されます。JavaScript では、パラメーターを指定せずに関数を呼び出すことができます。例えば:

function val(text)
{
  if (arguments != null && arguments.length > 0) {
    alert("i'm setting value here to " + text);
  } else {
    alert("i'm getting value here");
  }
}

val(); // alerts value getter
val('hi!'); // alerts value setter and the message

この例は、すべての関数で取得する引数のコレクションを指摘するために書かれています。すべての関数は、そのパラメーターをコレクションとしてフェッチし、それに応じてそのロジックを実行できます。ただし、表示される例は、実際には異なる方法で記述されます。

function val(text)
{
  if (typeof text === "string") {
    alert("i'm setting value here to " + text);
  } else {
    alert("i'm getting value here");
  }
}

関数に渡さない各パラメーターはundefined(not null) の「値」を取得します。これにより、最短の論理式を使用できます。ifステートメントでは任意の値を使用できます。nullとして評価されるか、undefined単に評価される変数false

以下のコメントで指摘されているように、textパラメーターが空の文字列の場合、 if (text)false が返されます。そのため、テキスト パラメータの場合は、タイプ別にパラメータを確認してください。

と の違いについても読むnullundefinedと有益です。

于 2012-08-25T10:02:17.750 に答える
5

関数がパラメーターで呼び出されたかどうかを確認するだけで済みます

function stuff(moreStuff){
   if(typeof moreStuff === "undefined"){
      return originalStuff;
   }else{
      setStuff(moreStuff);
   }
}
于 2012-08-25T09:59:28.310 に答える
3

非常に簡単です。変数に値があるかどうかを確認するだけです。

function foo(param) {
    // Method 1
    if (param != null) {
        // Parameter is defined
    } else {
        // No parameter (or null given)
    }

    // Method 2
    if (arguments.length > 0) {
        // At least one argument has been defined
    }
}
于 2012-08-25T10:00:37.223 に答える
1
function foo(value)
{
     if(typeof value != 'undefined')
     {
         // calling foo(2332)
     }
     else
     {
         // foo()
     }
}
于 2012-08-25T10:00:11.747 に答える
1

他のほとんどの人が言及したように、パラメーターをオーバーロードしていませんが、最初のステートメントでは、関数に提供される引数がありません。ただし、2 番目のものでは、引数が提供されています。したがって、簡単なチェックtypeof something == "undefined"で、さまざまな結果を簡単に変更して区別することができます。

これは、関数を構成する関連する jQuery コードです.val()(バージョン 1.8.0):

val: function( value ) {
        var hooks, ret, isFunction,
            elem = this[0];

        if ( !arguments.length ) {
            if ( elem ) {
                hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];

                if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
                    return ret;
                }

                ret = elem.value;

                return typeof ret === "string" ?
                    // handle most common string cases
                    ret.replace(rreturn, "") :
                    // handle cases where value is null/undef or number
                    ret == null ? "" : ret;
            }

            return;
        }

        isFunction = jQuery.isFunction( value );

        return this.each(function( i ) {
            var val,
                self = jQuery(this);

            if ( this.nodeType !== 1 ) {
                return;
            }

            if ( isFunction ) {
                val = value.call( this, i, self.val() );
            } else {
                val = value;
            }

            // Treat null/undefined as ""; convert numbers to string
            if ( val == null ) {
                val = "";
            } else if ( typeof val === "number" ) {
                val += "";
            } else if ( jQuery.isArray( val ) ) {
                val = jQuery.map(val, function ( value ) {
                    return value == null ? "" : value + "";
                });
            }

            hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];

            // If set returns undefined, fall back to normal setting
            if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
                this.value = val;
            }
        });
    }
于 2012-08-25T10:06:58.890 に答える