0

jQuery 拡張機能を使用していて、未定義のターゲット オブジェクトを拡張しようとするケースに遭遇しました。エラーは発生しませんが、ソース オブジェクトが期待どおりに拡張されません。jQuery は空白のオブジェクトを作成し、それに拡張すると想定していましたが、そうではないようです。空のオブジェクトを自分で作成することでこれを回避できますが、これが jQuery の拡張の場合であるという確認を探しています。ターゲット オブジェクトが未定義であることについて、jQuery Api で何も見つかりませんでした。

編集:申し訳ありませんが、JSFiddle を含める必要がありました -ここまたは以下の例を参照してください。そうすることで、私の質問を変更する必要があります。フィドルを見ると、オプション オブジェクトは存在しますが、拡張しようとしているプロパティは存在しません。ここに私の問題があります。jQuery はこの方法で空のプロパティを作成しないと思います。また、プロパティをオブジェクトに手動で追加する必要がありますか?

options = {newdata:true};

$("#click").click(function(){
  console.log(options);
  someFunc(options);
});

function someFunc(options) {
  $.extend(options.data, {
    someNewData: true
  });
  console.log(options);
}
4

1 に答える 1

1

関連するjQuery ソース ファイルの読み取り

target = arguments[0] || {};

に送信された最初の引数jQuery.extendが使用されます。偽または未定義の場合、新しい空のオブジェクトが作成されます。target によって返されjquery.extendます。

次のことを行うとします。

var target = undefined;
var data = {'hello': 'world'};
jQuery.extend(target, data);

targetまだだろうundefinedtarget未定義の可能性がある を使用したい場合は、次のように使用する必要がありますjQuery.extend

var target = undefined;
var data = {'hello': 'world'};
target = jQuery.extend(target, data);

あなたのサンプルコードに取り組んで、これを行う必要があります:

function someFunc(options) {
    options.data = $.extend(options.data, {
        someNewData: true
    });
    console.log(options);
}

の戻り値が にどのようにjQuery.extend割り当てられるかに注意してくださいoptions.data

于 2013-01-14T22:58:41.733 に答える