Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating functions for an object in javascript

Tags:

javascript

As far as I can tell, there are two main ways of creating functions for an object in javascript. They are:

Method A, make it in the constructor:

function MyObject() {
    this.myFunc1 = function() {
        ...
    }
    this.myFunc2 = function() {
        ...
    }
    ...
}

Method B, add it to the prototype:

function MyObject() {
    ...
}

MyObject.prototype.myFunc1 = function() {
    ...
}

MyObject.prototype.myFunc2 = function() {
    ....
}

Obviously if you did:

MyObject.myFunc3 = function() {
    ....
}

then myFunc3 would become associated with MyObject itself, and not any new objects created with the new keyword. For clarity, we'll call it method C, even though it doesn't work for creating new objects with the new keyword.

So, I would like to know what the differences between the two are. As far as I can tell they have the same effect logically, even if what's happening on the machine is different.

If I were to guess I would say that the only real difference is when you're defining them in the constructor like in method A, it creates a whole new function object for each object that's created, and Method B only keeps one copy of it (in MyObject), that it refers to any time it's called. if this is the case, why would you do it one way over the other. Otherwise, what is the difference between method A and method B.

like image 403
Leif Andersen Avatar asked Feb 26 '12 02:02

Leif Andersen


People also ask

Can you put a function in an object JavaScript?

You can call a function inside an object by declaring the function as a property on the object and invoking it, e.g. obj. sum(2, 2) . An object's property can point to a function, just like it can point to a string, number or other values. Copied!

How do you create a function for an object?

Function objects can also be created as part of an object literal. Below we create an object named circle with a property named area which is a function object. Next, let's look at an example where a function object is passed around like a regular object. The negate function takes a function as its argument.

How do you associate function with object using JavaScript?

In JavaScript you can associate functions with objects. Here we will demonstrate how the constructor creates the object and assigns properties. Object is a standalone entity, with properties and type in JavaScript. JavaScript objects can have properties, that define their characteristics.


1 Answers

The advantage of giving a separate function to each object is that you can close over variables in the constructor, essentially allowing for "private data".

function MyObject(a,b) {
    var n = a + b; //private variable
    this.myFunc1 = function() {
        console.log(n);
    }
};

vs

function MyObject(a,b) {
    this.n = a + b; //public variable
}

MyObject.prototype.myFunc1 = function() {
    console.log(this.n);
}

Whether this is a good idea or not depends on who you ask. My personal stance is reserving constructor functions for when I actually use the prototype, as in option #2 and using plain functions (say, make_my_object(a,b)) when using closures, as in option #1.

like image 103
hugomg Avatar answered Sep 30 '22 12:09

hugomg