无法访问构造函数中的变量集

时间:2014-10-08 11:38:39

标签: javascript oop

任何人都可以建议这段代码可能有什么问题吗? 在构造函数中设置的变量只能在创建对象时访问,但是一旦我调用其中一个对象的方法,就不再可以访问该变量。

function Animal(name) {
      this.name = name
}

Animal.prototype = (function() 
{
    var i = 0;
    var sitdown = function() {
                      console.log(this.name + ' sits down.');
                      standup();
                  };
    var standup = function (){
                      console.log(this.name+' stands up');
                      if(i != 10)
                      {
                        i++;
                        sitdown();
                      }
                  };
    return {
        standup: standup
    }
})();

var Tiger = new Animal("Tiger");
Tiger.standup();

输出:

Tiger stands up 
 sits down. 
 stands up 
 sits down. 
 .......
 ....... 
 stands up 
 sits down. 
 stands up 

2 个答案:

答案 0 :(得分:2)

'this'只包含对象引用,如果你是

  • 使用方法语法调用函数,例如this.sitdown()
  • 或者您使用call()/ apply()调用它,就像在sitdown()中一样:standup.call(this)

你的standup()方法将sitdown()作为一个函数调用,而不是作为一个方法,并且不起作用。

答案 1 :(得分:1)

除了standup的第一次调用外,this指向窗口,而不是Tiger。问题是,在standup中,您拨打sitdown()。相反,您应该致电sitdown.call(this)