---
title: "Encapsulation in JavaScript"
description:
  "JavaScript does not allow you to define a method as public or private. This
  is a limitation users need to get around to, because in real life you don't
  want to expose all methods as public method."
canonical_url: "https://www.bigbinary.com/blog/encapsulation-in-javascript"
markdown_url: "https://www.bigbinary.com/blog/encapsulation-in-javascript.md"
---

# Encapsulation in JavaScript

JavaScript does not allow you to define a method as public or private. This is a
limitation users need to get around to, because in real life you don't want to
expose all methods as public method.

- Author: Neeraj Singh
- Published: October 12, 2009
- Categories: JavaScript

JavaScript does not allow you to define a method as public or private. This is a
limitation users need to get around to, because in real life you don't want to
expose all methods as public method.

Here is a simple implementation of the case where you want to verify input code.

```javascript
function verifycode(code) {
  console.log(code.length);
  return code.length == 4 ? true : false;
}

function info(code) {
  if (verifycode(code)) {
    console.log(code + " is valid");
  } else {
    console.log(code + " is wrong");
  }
}

info("abcd");
info("rty");
```

In the above implementation anyone can call the method verifycode. Not good.
Here is one way to fix this problem.

```javascript
var Lab = Lab || {};
Lab = (function () {
  var verifycode = function (code) {
    console.log(code.length);
    return code.length == 4 ? true : false;
  };
  return {
    info: function (code) {
      if (verifycode(code)) {
        console.log(code + " is valid");
      } else {
        console.log(code + " is wrong");
      }
    },
  };
})();

Lab.info("abcd");
Lab.info("rty");
Lab.verifycode("abcd"); //verifycode is private
```

Another way to solve the same problem would be to create a constructor function.
Here is an implementation.

```javascript
function Lab(code) {
  this.code = code;
  var verifycode = function () {
    return code.length == 4 ? true : false;
  };
  this.info = function () {
    if (verifycode()) {
      console.log(code + " is valid");
    } else {
      console.log(code + " is wrong");
    }
  };
}
new Lab("abcd").info();
```

Here is another way to solve the same problem. In this case I have moved all the
public methods to prototype.

```javascript
function Lab(code) {
  this.code = code;
  this.verifycode = function () {
    l = code.length;
    return l == 4 ? true : false;
  };
}

Lab.prototype.info = function () {
  if (this.verifycode()) {
    console.log(this.code + " is valid");
  } else {
    console.log(this.code + " is wrong");
  }
};

new Lab("abcd").info();
```

## Links

- [Human page](https://www.bigbinary.com/blog/encapsulation-in-javascript)
