Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Encapsulation in Javascript

I'm pretty new to Javascript, as my SO profile will attest.

I've just been reading up on a few tutorials and come across something I don't totally understand in regards to Object Orientation and Encapsulation when applied with Javascript.

The tutorial stated that Javascript objects can be declared like this:

var myCustomObject = new Object();

And that you can give it instance variables like this:

myCustomObject.myVariable = "some value";
myCustomObject.myOtherVariable = "deadbeef";

Finally, it states that you can create a template function to create new objects like this:

function CustomObject(myVariable, myOtherVariable)
{
    this.myVariable = myVariable;
    this.myOtherVariable = myOtherVariable;
}

I also know that you can create and assign values to variables that do not yet exist and as a result are declared implicitly, as is seen in the example, where myCustomObject didn't have a myVariable, but now it does.

So, my question is: What is there to prevent new variables from being added at some other point in the code. If I'm trying to learn how an object works and what I can/should do with it, I may never see the variable additions that could well be in some other .js file, and thus not have a full understanding of the object...

Also, how do I know that some object that has just been created won't suddently turn out to have 60 more variables added later on in code that weren't mentioned at all at creation time?

How are you meant to be able to understand what an object can contain at a glance if more can just be added to it "willy nilly"?

like image 738
Jasarien Avatar asked Oct 19 '10 09:10

Jasarien


People also ask

What is encapsulation and its example?

Encapsulation in Java is a process of wrapping code and data together into a single unit, for example, a capsule which is mixed of several medicines. We can create a fully encapsulated class in Java by making all the data members of the class private.

What is the concept of encapsulation?

By definition, encapsulation describes the idea of bundling data and methods that work on that data within one unit, like a class in Java. This concept is also often used to hide the internal representation, or state of an object from the outside. This is called information hiding.

How do you encapsulate a class in JavaScript?

Encapsulation in a Javascript class You can create a class that acts as the blueprint of the person object above. To encapsulate the class properties, you need to declare the properties as private using the hashtag symbol # . The name variable above is declared using the hashtag # symbol in front of it.

What is encapsulation in typescript?

Encapsulation is built on the idea of hiding data. This is where we restrict access to specific properties or methods. In our example, the property _name is private. This means we can't access this property from outside the class.


2 Answers

I can't quite believe that I'm about to quote Spiderman but …

With great power comes great responsibility

JavaScript is powerful and flexible and gives programmers lots of freedom. It doesn't come with features designed to stop programmers writing bad code. When you write JavaScript, you are responsible for making sure the code is good, not the language.

like image 197
Quentin Avatar answered Sep 28 '22 05:09

Quentin


You can't, there's nothing that stops me from doing whatever I want with your objects ;) However, you don't have to use those variables..

One thing you can do is to play with scopes, example:

function myConstructor()
{
  var myState = {}; //Create new, empty object
  myState.text = "Hello World!";
  this.say = function() {
    alert(myState.text);
  };
}

In this simple example you can store you internal variables in myState (or "var text = '';" etc) and they aren't accessible from outside since they are not members of an object, they are just private variables in your function. And, as you can see, the function say still has access to it.

like image 44
Onkelborg Avatar answered Sep 28 '22 03:09

Onkelborg