0

myObject には 2 つの関数があり、最初の関数は 2 番目の関数を呼び出しています。callMe() 内の変数を確認する方法はありますか?

var myObj =  {
   callMefirst: function() {
      var thisObj = this;
      var a;
      a = 'chocolate cookie';
      thisObj.callMe();
   },

   callMe: function() {
      alert(a);
   }
}
myObj.callMefirst();

それ以外の場合は、パラメーターとして渡すか、オブジェクトのグローバルスコープで var a を設定できることはわかっていますが、スコープのこの特定のケースを理解することに興味があります

4

4 に答える 4

2

いいえ。varキーワードで定義されているため、定義されている関数にスコープされます。したがって、その関数と、その関数内で定義された他の関数 (あなたが持っていない関数) にのみ表示されます。

于 2013-04-08T11:38:48.200 に答える
1

これは複数の方法で行うことができます。以下は閉鎖を使用します。

var myObj = (function() {
   var a;

   return{
     callMefirst: function() {
        var thisObj = this;
        a = 'chocolate cookie';
        thisObj.callMe();
     },

     callMe: function() {
        alert(a);
     }
   }
})()
myObj.callMefirst();

オブジェクトの開始でクロージャを使用する:

var myObjF = function(pass) {
   var a=pass;

   return{
     callMefirst: function() {
        var thisObj = this;
        thisObj.callMe();
     },

     callMe: function() {
        alert(a);
     }
   }
}
var myObj=myObjF("hello");
myObj.callMefirst();

関数をオブジェクトとして使用する:

var myObjF = function(pass) {
   this.a=pass;

    this.callMefirst = function() {
        var thisObj = this;
        thisObj.callMe();
     };
}
myObjF.prototype.callMe = function() {
    alert(a);
}

var myObj=new myObjF("hello");
myObj.callMefirst();
于 2013-04-08T11:53:32.060 に答える