Javascript 创建一个私有的;功能“;在ES6JS中的类主体内部,并对对象隐藏它';s接口

Javascript 创建一个私有的;功能“;在ES6JS中的类主体内部,并对对象隐藏它';s接口,javascript,Javascript,我想创建一个私有函数并将其放在类主体中,但不想像我在构造函数()函数中所做的那样将其返回到对象的原型接口,请看一下: class Circle { constructor(radius) { const _radius = radius; //see I'm not returning it to $this object! } parseJSON(json) { //this should be a private function,

我想创建一个私有函数并将其放在类主体中,但不想像我在构造函数()函数中所做的那样将其返回到对象的原型接口,请看一下:

class Circle {
    constructor(radius) {
        const _radius = radius;
        //see I'm not returning it to $this object!
    } 
    parseJSON(json) { //this should be a private function, only accessible inside the class body
        result = //.. do some magic
        return result;
    }
    draw(){
        const result = parseJSON("argument");
        return result;
    }
}
const c1 = new Circle(1);
console.dir(c1);
console.dir(Circle);
我想通过从对象的原型接口隐藏parseJSON()‘private’函数,将面向对象编程的“抽象”概念应用到这个类中

我希望输出完全符合以下要求:

c1: {
    //nothing!
    __proto__: {
        draw: function()
        //there is no parseJSON here!
    }
}
Circle: {
    //nothing!
}

只需为私有函数创建一个带有var的函数

class Circle {
 constructor() {

  var privateFunction = function() {
    // do something
  }
 }
 
}
就像上面提到的,你可以用一个

然而,这目前是一个实验性特征

如果您想要当前支持的内容,可以使用作用域。把全班同学都包起来就行了。这将创建一个新的作用域来保存私有函数

const Circle = (function () {
  function parseJSON(json) {
    return // ... do some magic
  }

  return class {
    constructor(radius) {
      this._radius = radius;
    }
    draw() {
      return parseJSON("argument");
    }
  };
})();

请注意,您不能在私有函数中访问此,因为它不是对象的属性。通过参数传递您需要的所有内容。

MDN对于这类内容来说是一个很好的资源。对这个问题的否决票对我来说没有任何意义,私有字段不能解决我的问题。我想对外部对象接口隐藏#parseJSON()方法,而不仅仅是限制对它的访问如果它不在原型上,它将如何在类的实例之间共享,以供其他方法使用?好问题,这就是为什么我要求一种方法来实现它,而且我在逻辑上要求,由于原型上的方法是实例之间共享类的方式,如果该方法不在原型上,这怎么可能呢?该方法只能在构造函数方法中使用。@Taplar,请仔细阅读OP.
parseJSON
,如果它们是共享的。他们希望它能被分享,但不能放在桌面上prototype@Taplar让我观察一下我的问题想法的好处:圆圈原型中的方法都需要使用parseJSON函数,但我(对象的使用者)不需要从类主体范围之外访问parseJSON,例如,我不需要从另一个类(例如Square类)访问parseJSON()函数!这是(parseJSON)只是一个“实用工具”或“工具”,只需要在Circle类中使用。哦!这是解决方案之一!但是看看代码,它被严重污染了,难道没有其他更简单的方法来实现这一点吗?私有类字段只是限制了对方法的访问,但它们仍然显示在对象的原型接口中,在使用#parseJSON上的私有类字段后,尝试console.dir(圆圈),您将在输出中看到#parseJSON仍然显示在对象的接口3limin4t0r上,您是我能看到的唯一一个能够清楚地看到问题的人,感谢您的评论,是的,这是真的,在javascript中创建范围的唯一方法是使用包装函数。你认为这是像我一样的新的es6 javascript类中遗漏的一部分吗?我说错了,目前也有,但这有点棘手<代码>让/
常量
和看似命名的类在块级别确定作用域,而
var
和命名函数的作用域是最近的函数。
const Circle = (function () {
  function parseJSON(json) {
    return // ... do some magic
  }

  return class {
    constructor(radius) {
      this._radius = radius;
    }
    draw() {
      return parseJSON("argument");
    }
  };
})();