11

以下の例では、functionA()が呼び出されると、thisキーワードは含まれているオブジェクトを参照するため、そのプロパティにアクセスできます (例: theValue)

私の質問:ネストされたmyObj内の from のプロパティを参照するにはどうすればよいですか? functionB()

var myObj = {
    theValue: "The rain in Spain", 
    functionA: function() {
        alert(this.theValue);
    },
    moreFunctions: {
        functionB: function() {
            alert(????.theValue);
        }
    }
}

myObj.functionA(); 
myObj.moreFunctions.functionB();  

前もって感謝します。

4

3 に答える 3

9

救助への即時呼び出し!

var myObj = (function () {
    var that = {
        theValue: "The rain in Spain", 
        functionA: function() {
            alert(this.theValue); // or that.theValue, both work here
        },
        moreFunctions: {
            functionB: function() {
                alert(that.theValue);
            }
        }
    };
    return that;
}()); // <-- immediate invocation !!

さらに分解できます。

var myObj = (function () {
    function functionA() {
        alert(that.theValue);
    }
    function functionB() {
        alert(that.theValue);
    }
    var that = {
        theValue: "The rain in Spain", 
        functionA: functionA,
        moreFunctions: {
            functionB: functionB
        }
    }
    return that;
}());

OOP に精通している場合は、これを使用してプライベート変数を作成できます。

于 2013-06-13T23:21:26.840 に答える
6

あなたは単に使用することができますmyObj

alert(myObj.theValue);

デモを確認http://jsbin.com/izugon/2/edit

于 2013-06-13T23:21:15.110 に答える
3

一般的な方法は、「self」変数を定義し、this キーワードではなくそれを使用することです。これは、スコープを追加したり、クラスを作成したりする場合に役立ちます。

var myObj = new function(){
    var self = this;
    this.theValue = "The rain in Spain";
    this.functionA = function() {
        alert(self.theValue);
    },
    this.moreFunctions = {
        functionB: function() {
            alert(self.theValue);
        }
    }
   }();

   myObj.functionA();
   myObj.moreFunctions.functionB();

もう 1 つの可能性は、ECMA5 Function.prototype.bind メソッドを使用することです。簡単に言えば、メソッドのthisキーワードをバインドできます。詳細については、リンクをたどるか、検索エンジンを使用してください。このメソッドを使用する場合は、古いブラウザーと互換性がないことに注意してください。ただし、提供されたリンクには、古いブラウザーで.bindメソッドを実装するために使用できる代替実装が示されています。

var myObj = new function(){
    this.theValue = "The rain in Spain";
    this.functionA = function() {
        alert(this.theValue);
    }.bind(this);
    this.moreFunctions = {
        functionB: function() {
            alert(this.theValue);
        }.bind(this)
    };
}();

myObj.functionA();
myObj.moreFunctions.functionB();
于 2013-06-13T23:28:58.583 に答える