0

私は、このコードがJavaScriptの性質上ちょっと奇妙であることを十分に理解していますが、それを見てください:

var arr = [
    function () {
    this.b = "hello";
        //or var b = "hello";
        arr[1]();
    },
    function () {
        var str = RealtimeParentFunc.b;
        alert(str);
        // want to get "hello"
    }
];
// want to get "hello"!
arr[0]();

無理かもしれませんが、何か方法はないかと思います。同じ配列内の関数を呼び出した配列の関数の変数を取得する方法は?

更新
この問題に戻る必要があり、更新を投稿することにしました: もちろんarr[i]、それ自体から参照することはできませんが、上記のコードは文字通りに解釈されるべきではないことを強調しなければなりません: それは単なるデモでした私が欲しかったもの; しかし、以前にコードで定義された小さな「アジュバント」機能があれば、やりたいことができるようです。

var a = function (i, v) {
        return arr[i]()[v];
    };
var arr = [
function () {
    var h = "hello, ";
    var n = a(2, "n");
    return {
        "h": h+n
    }
}, function () {
    var h = a(0, "h");
    alert(h)
}, function () {
    return {
        "n": "your name"
    }
}];
arr[1]();  
4

1 に答える 1

3

arr2作成時にはまだ存在しないため、配列を定義してその値に同時にアクセスすることはできません。

[ function(){ .. }, function(){ .. }]配列は、最後のセミコロンに到達するまで作成および設定されませんarr2。したがって、定義中;は参照できません。arr2[1]()

その点で、できることは、最初に配列を定義し、次に.push()関数をそれに定義することですが、それでも順番に行うことに制限されています:

var arr2 = [];

arr2.push(
function () {
    var b = "hello";
    //arr2[1](); // CAN'T DO THIS since arr2[1] doesn't exist
    return {
        b: b
    };
});
arr2.push(
function () {
    var str = arr2[0]().b;
    alert(str);
    // want to get "hello"
});
// want to get "hello"!
arr2[0]();
arr2[1]();

作業フィドルを参照してください: http://jsfiddle.net/amyamy86/5k57X/

于 2013-03-22T05:23:00.880 に答える