从函数访问JavaScript对象变量

时间:2018-11-02 12:41:33

标签: javascript javascript-objects

我在下面有以下代码,但是有一个问题。 我想从调用匿名函数的名为the_id的函数clslevel()内部访问一个变量。我尝试过this.the_id,但返回的结果未定义。

function clslevel(id){ 
  var the_id = id;
  this.methodOne=function(param){
    param();
    return this;
  };
  this.methodTwo=function(param){
    param();
    return this;
  };
  
}


function level(id){
  return new clslevel(id);
}



level("myButton")
  .methodOne(
    function(){
      console.log("methodOne called.");
      // how can I access the variable 'the_id' in clslevel() from here?
    }  
  )
  .methodTwo(
    function(){
      console.log("methodTwo called");
    }  
  )

提前谢谢!

3 个答案:

答案 0 :(得分:2)

将其作为参数传递给函数,如下所示:

function clslevel(id){ 
  var the_id = id;
  this.methodOne=function(param){
    param(the_id);
    return this;
  };
  this.methodTwo=function(param){
    param();
    return this;
  };
  
}


function level(id){
  return new clslevel(id);
}



level("myButton")
  .methodOne(
    function(the_id){
      console.log("methodOne called.", the_id);
      // You have the_id here
    }  
  )
  .methodTwo(
    function(){
      console.log("methodTwo called");
    }  
  )

答案 1 :(得分:2)

您可以将此变量传递给回调:

function clslevel(id){ 
  var the_id = id;
  this.methodOne=function(param){
    param(the_id);
    return this;
  };
  this.methodTwo=function(param){
    param();
    return this;
  };

}


function level(id){
  return new clslevel(id);
}



level("myButton")
  .methodOne(
    function(passed_id){
      console.log("methodOne called.");
      console.log(passed_id)
      // how can I access the variable 'the_id' in clslevel() from here?
    }  
  )
  .methodTwo(
    function(){
      console.log("methodTwo called");
    }  
  )

答案 2 :(得分:1)

您可以传递对象的引用,以便可以在其他作用域内使用父函数

function clslevel(id){ 
  this.the_id = id;
  this.methodOne=function(param){
    param(this);
    return this;
  };
  this.methodTwo=function(param){
    param(this);
    return this;
  };
  
}


function level(id){
  return new clslevel(id);
}



level("myButton")
  .methodOne(
    function(parent){
      console.log("methodOne called.");
      console.log('the_id = ' + parent.the_id)
      // how can I access the variable 'the_id' in clslevel() from here?
    }  
  )
  .methodTwo(
    function(){
      console.log("methodTwo called");
    }  
  )