我看到javascript中可以用面向template的模式实现面向对象的结构。请问如何实现公有和私有的属性和方法呢并且允许他们之间互相调用呢?
比如下面代码:
function ClassA()
{
  var privateProperty = 1;
  this.publicProperty = 1;
  
  this.publicMethod1 = function()
  {
    try{
      alert("print privateProperty in publicMethod1 : " + privateProperty);
    }catch (e){
      alert("error while printing privateProperty in publicMethod : " + e.message);
    }
    try{
      alert("print publicProperty in publicMethod1 : " + publicProperty);
    }catch (e){
      alert("error while printing publicProperty in publicMethod1 : " + e.message);
    }
    
    privateMethod();
  }
  
  this.publicMethod2 = ClassAPublicMethod2;
  
  function privateMethod()
  {
    try{
      alert("print privateProperty in privateMethod : " + privateProperty);
    }catch (e){
      alert("error while printing privateProperty in privateMethod." + e.message);
    }
    try{
      alert("print publicProperty in privateMethod : " + publicProperty);
    }catch (e){
      alert("error while printing publicProperty in privateMethod." + e.message);
    }
  }
}function ClassAPublicMethod2()
{
  try{
    alert("print privateProperty in publicMethod2 : " + this.privateProperty);
  }catch (e){
    alert("error while printing privateProperty in publicMethod2 : " + e.message);
  }
  try{
    alert("print publicProperty in publicMethod2 : " + this.publicProperty);
  }catch (e){
    alert("error while printing publicProperty in publicMethod2 : " + e.message);
  }
  try{
    this.privateMethod();
    alert("invoking of privateMethod in publicMethod2 is completed successfully.");
  }catch (e){
    alert("error while invoking privateMethod in publicMethod2 : " + e.message);
  }
}结果是无论在publicMethod1里还是在privateMethod里,都只能存取privateProperty而无法存取publicProperty。我觉得可能无论在privateMethod还是publicMethod1里,this都仅仅只privateMethod和publicMethod1自己,并不是指ClassA。所以才会出现'publicProperty'未定义错误。
请问如何在这样的方法里面存取公有属性或公共方法呢?
在publicMethod2里存取privateProperty虽然没有报错,但访问结果是undefined,其实也是不成功的,原因我想是因为publicMethod2本身定义在ClassA外面,所以其中是没有privateProperty的定义的,因此返回了undefined。
请问又如何在这种情况下存取对象里的私有属性呢?
我在publicMethod2中想调用私有方法的代码也失败了,原因可能仍然是因为其在ClassA的范围以外。
请问有没有什么方法能够允许在单一方法内即能访问公共属性或方法,又能访问私有属性或方法?