Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象内部的变量范围_Javascript_Scope - Fatal编程技术网

Javascript 对象内部的变量范围

Javascript 对象内部的变量范围,javascript,scope,Javascript,Scope,myObject有两个函数,第一个调用第二个,有没有办法在callMe()中看到变量a 否则,我知道我可以将其作为参数传递,或者在对象的全局范围内设置var a,但我有兴趣了解scope的这种特殊情况否。因为它是用var关键字定义的,所以它的作用域是它在其中定义的函数。因此,它仅对该函数和该函数中定义的其他函数(您没有)可见。否。因为它是用var关键字定义的,所以它的作用域是它在其中定义的函数。因此,它仅对该函数和该函数中定义的其他函数(您没有)可见。a是在callMefirst函数中定义的,仅

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


否则,我知道我可以将其作为参数传递,或者在对象的全局范围内设置var a,但我有兴趣了解scope的这种特殊情况

否。因为它是用
var
关键字定义的,所以它的作用域是它在其中定义的函数。因此,它仅对该函数和该函数中定义的其他函数(您没有)可见。

否。因为它是用
var
关键字定义的,所以它的作用域是它在其中定义的函数。因此,它仅对该函数和该函数中定义的其他函数(您没有)可见。

a
是在
callMefirst
函数中定义的,仅存在于此处。请记住,JavaScript具有功能(词汇)范围。因此,让
callMe
访问
a
的最简单方法是按照您的建议,并在
myObj
的范围内定义
a
callMefirst
函数中定义,并且仅存在于此处。请记住,JavaScript具有功能(词汇)范围。因此,让
callMe
访问
a
的最简单方法是按照您的建议,在
myObj
的范围内定义它

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

   callMe: function() {
      alert(this.a);
   }
}
myObj.callMefirst();
请尝试以下代码:

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

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

你可以通过多种方式做到这一点;下面使用闭包

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();

你可以通过多种方式做到这一点;下面使用闭包

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();

var this.a
将使其成为映射(对象)属性,从而可以从对象中的任何方法中选择(
alert(this.a);
)。
var this.a
将使其成为映射(对象)属性,从而可以从对象中的任何方法中选择(
alert(this.a);
)。