我们如何在javascript中实现私有类成员?

时间:2017-01-30 15:57:04

标签: javascript

我是一名尝试Javascript的Java开发人员。我知道两者之间存在差异。我们可以使用对象,原型或类(ES6)将数据绑定在一起。但是我们如何在Java中实现Javascript中的私有类成员呢?

例如,我有一个Cat类定义如下:

function Cat() {
    this.name = "kitty";
    this.colour = "white";
}

var kitty = new Cat();

我不希望可以从Cat声明之外访问类的名称和颜色属性。

有没有办法在Javascript中实现这一点?

2 个答案:

答案 0 :(得分:1)

我不太相信我要引用蜘蛛侠但是......

  

强大的力量带来了巨大的责任

JavaScript功能强大且灵活,为程序员提供了很多自由。它没有旨在阻止程序员编写错误代码的功能。当你编写JavaScript时,你有责任确保代码是好的,而不是语言。

使用闭包可以实现私有变量/属性。

  

闭包是指独立(自由)变量的函数   (在本地使用但在封闭范围内定义的变量)。   换句话说,这些功能“记住”其中的环境   他们被创造了。

var add = (function () {
    var counter = 0; /// here is your private property/variable
    return function () {return counter += 1;}
})();

add();
add();
add();

// the counter is now 3

要了解有关闭包的更多信息,请转到clousers

谢谢! 保持饥饿,流浪愚蠢:)

答案 1 :(得分:1)

是的私人会员可以在javascript中使用。虽然javascript不支持公共,私有属性。

有各种方法可以实现它,例如:闭包(已经在上面的例子中解释过)和各种设计模式。

其中一个是Modular Reveal Pattern,它就像:

function Cat(){
  // PRIVATE MEMBERS
  var name = 'kitty';
  var color = 'white';
  var eats = function(){ return true };
  // PUBLIC MEMBERS (REVEALED MEMBERS)
  return {
    'catName':name,
    'catEats':eats
  }
}
var catInstance = new Cat();
console.log(catInstance.catName); //kitty (public)
console.log(catInstance.color); //undefined (private)