0

WebサイトはファイルonLoadのロードに使用しJavaScriptます(.js)。JavaScriptを使用してそのjsファイル内の関数の1つを変更したいと思います。

この関数は「Hello13」と呼ばれ、他の多くの関数(hello5、、hello6など)の1つです。

関数は次のHello13ようになります。

function hello13(x, y, z) {
    if (x == null) {
        //something, something.
    }
    if (y == null) {
        //something else, something else.
    }
    if (z == null) {
        //something diffrent, something diffrent.
    }
}

ご覧のとおり、関数が呼び出されると、いくつかの値(x, y, z)が与えられます。

zを(jsファイル内の)自分の値に「ハードコーディング」したいと思います。

したがって、プログラムで変更した後は、次のようになります。

function hello13(x, y, z) {
    z = MyValueOverride.
.....

zJavaScriptを使用して、サイトが読み込まれた後、jsファイル内に独自の ""値を追加するにはどうすればよいですか?

4

3 に答える 3

4

インラインスクリプトタグ(ローカル定義または外部JSファイルのいずれか)を介してロードされるJavaScriptでグローバルに定義された関数である場合は、その関数の独自のバージョンで再定義できます。最後に来る定義がアクティブな定義になります。

ですから、あなたがやりたいのは、ターゲット関数を含む外部JSファイルの直後に独自の定義を提供することのように思えます。そうすれば、定義が元の定義に置き換わります。元の名前を保持したい場合は、置き換える前に別の変数名に割り当てることができます。

// save original function reference (if desired)
var originHello13 = hello13;

// now define the new function which will replace the previous definition
function hello13(x, y, z) {
    z = MyValueOveride...
}

外部javascriptファイルが動的にロードされる場合、動的にロードされた外部JSファイルがいつロードされたかを知る方法を理解して、オーバーライドを定義できるようにする必要があるため、状況は少し複雑になります。外部JSファイルがどのようにロードされるかについて詳しく説明し、その方法の詳細を提供する必要があります。

于 2013-01-27T00:51:59.717 に答える
4

それを再定義します。元の関数でロジックを使用する場合は、元の関数への参照を保存してから再定義し、新しい関数から元の関数を呼び出します。

var originalHello13 = hello13;
hello13 = function( x, y, z ){
    z = MyValueOverride.
    return originalHello13( x, y, z );
}
于 2013-01-27T00:53:08.640 に答える
0

関数を再定義するクロージャを作成し、新しい関数が呼び出されるたびに古い関数を呼び出します。

hello13 = (function () {
    // Keep a reference to the old function
    var _hello13 = hello13;

    // return a new function, which will be stored in hello13
    return function (x, y, z) {
        z = MyValueOverride;
        return _hello13(x, y, z);
    };
}());

これがフィドルです:http://jsfiddle.net/hKavH/

于 2013-01-27T00:52:39.277 に答える