无法从私有方法访问公共方法

时间:2014-10-08 08:41:42

标签: javascript oop

我知道有很多关于私有/公共方法如何在JS中工作的主题,但它们都没有解决我目前遇到的问题。

如下所示,我只是想尝试访问公共方法 私人方法。

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

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

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

一切正常,直到它进入standup()方法。

您能告诉我如何解决这个问题?

谢谢, 亚历克斯

2 个答案:

答案 0 :(得分:1)

您未在standup范围内定义功能var sit,您需要更改代码,例如

Animal.prototype = (function() 
{
    var sit = function() {
        console.log(this.name + ' sits down.');
        standup();
    };
    function standup()
    {
       console.log(this.name+' stands up'); //`this` here is global object, not your created
    }
    return {
        standup: standup
    }
})();

UPDATE:更新后,OP意味着你需要这样的东西

Animal.prototype = (function() 
{
    var sitdown = function() {
                      console.log(this.name + ' sits down.');
                      standup.call(this);
                  },
        standup = function (){
                      console.log(this.name+' stands up');
                  }
    return {
    standup: function()
    {
       sitdown.call(this);
    }
   }
})();

还有关于this keyword

的更多信息

答案 1 :(得分:0)

删除返回,一切正常。

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

Animal.prototype = (function() 
{
  var sit = function() {
    console.log(this.name + ' sits down.');
    standup();
  };
  var standup = function()
    {
       console.log(this.name+' stands up');
    };
})();