0

myObject 有两个函数,第一个调用第二个,有没有办法在 callMe() 中查看变量 a?

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

a是在函数中定义的,callMefirst并且只存在于这里。请记住,JavaScript 具有功能(词法)范围。因此,让callMe访问权限的最简单方法a是按照您的建议并将其定义在myObj.

于 2013-04-08T11:39:54.410 回答
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 回答
0

试试这个代码:

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

   callMe: function() {
      alert(this.a);
   }
}
myObj.callMefirst();
于 2013-04-08T11:50:56.030 回答