Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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_Oop - Fatal编程技术网

Javascript从同一对象内的私有方法调用公共方法

Javascript从同一对象内的私有方法调用公共方法,javascript,oop,Javascript,Oop,我可以从private one中调用public方法吗: var myObject = function() { var p = 'private var'; function private_method1() { // can I call public method "public_method1" from this(private_method1) one and if yes HOW? } return { public_metho

我可以从private one中调用public方法吗:

var myObject = function() {
   var p = 'private var';
   function private_method1() {
      //  can I call public method "public_method1" from this(private_method1) one and if yes HOW?
   }

   return {
      public_method1: function() {
         // do stuff here
      }
   };
} ();
做一些类似于:

var myObject = function() {
   var p = 'private var';
   function private_method1() {
      public.public_method1()
   }

   var public = {
      public_method1: function() {
         alert('do stuff')
      },
      public_method2: function() {
         private_method1()
      }
   };
   return public;
} ();
//...

myObject.public_method2()

不知道直接答案,但下面应该可以

var myObject = function() 
{
   var p = 'private var';   
  function private_method1() {
   _public_method1()
  }
  var _public_method1 =  function() {
         // do stuff here
    }

  return {
    public_method1: _public_method1
  };
} ();

公共方法1
不是公共方法。它是一个匿名对象上的方法,完全在构造函数的return语句中构造

如果要调用它,为什么不这样构造对象:

var myObject = function() {
    var p...
    function private_method() {
       another_object.public_method1()
    }
    var another_object = { 
        public_method1: function() {
            ....
        }
    }
    return another_object;
}() ;

为什么不做一些你可以实例化的事情呢

function Whatever()
{
  var p = 'private var';
  var self = this;

  function private_method1()
  {
     // I can read the public method
     self.public_method1();
  }

  this.public_method1 = function()
  {
    // And both test() I can read the private members
    alert( p );
  }

  this.test = function()
  {
    private_method1();
  }
}

var myObject = new Whatever();
myObject.test();

这种方法不可取吗?不过我不确定

var klass = function(){
  var privateMethod = function(){
    this.publicMethod1();
  }.bind(this);

  this.publicMethod1 = function(){
    console.log("public method called through private method");
  }

  this.publicMethod2 = function(){
    privateMethod();
  }
}

var klassObj = new klass();
klassObj.publicMethod2();

谢谢你的快速回答,我可以在公共变量中放置多个方法吗,我尝试了你的模型,但我有一些sintax错误,但在我的代码中拒绝像一个一样对待,(我将不得不调试它。再次感谢Daniel的解释我成功了,再次感谢大家,我接受了“BaroqueBobCat”主要是因为他是第一个,但Daniel的答案更为复杂。Anks Peter,不幸的是,我现在有很多代码来重写我主要用作名称空间的模型。