Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between this.function and prototype.function?

Tags:

Given simple JS inheritance, what's the practical difference in the base function between these two examples? In other words, when should a person choose to define a function on "this" instead of on the prototype (or the other way around)?

For me the second example is easier to digest, but how much more is there to this?

function defined on this:

//base var _base = function () {     this.baseFunction = function () {         console.log("Hello from base function");     } }; //inherit from base function _ctor() {     this.property1 = "my property value"; }; _ctor.prototype = new _base(); _ctor.prototype.constructor = _ctor; //get an instance var instance = new _ctor(); console.log(instance.baseFunction); 

function defined on prototype:

//base var _base = function () {}; _base.prototype.baseFunction = function () {     console.log("Hello from base function"); } //inherit from base function _ctor() {     this.property1 = "my property value"; }; _ctor.prototype = new _base(); _ctor.prototype.constructor = _ctor; //get an instance var instance = new _ctor(); console.log(instance.baseFunction); 
like image 979
Joseph Gabriel Avatar asked Mar 27 '13 12:03

Joseph Gabriel


People also ask

What is the difference between function and function prototype?

While a function definition specifies how the function does what it does (the "implementation"), a function prototype merely specifies its interface, i.e. what data types go in and come out of it.

What is the difference between function prototype and function header?

The only difference between the function prototype and the function header is a semicolon (see diagram below). The function definition is placed AFTER the end of the int main(void) function. The function definition consists of the function header and its body.

What is the difference between function prototype and arguments?

A function prototype ensures that calls to a function are made with the correct number and types of arguments. A function prototype specifies the number of arguments. It states the data type of each of the passed arguments.

What is the difference between prototype and __ proto __?

prototype is a property of a Function object. It is the prototype of objects constructed by that function. __proto__ is an internal property of an object, pointing to its prototype.


1 Answers

Functions on the prototype are only created once and shared between each instance. Functions created in the constructor are created as new objects for each new object created with the constructor.

As a general rule functions should be on the prototype since they will generally not be modified for different objects of the same type, and this has a slight memory/performance benefit. Other properties like objects and arrays should be defined in the constructor, unless you want to create a shared, static property, in which case you should use the prototype.

Its easier to see the distinctions with normal objects or arrays rather than functions

function Foo(){     this.bar = []; } var fooObj1 = new Foo(); var fooObj2 = new Foo();  fooObj1.bar.push("x"); alert(fooObj2.bar) //[] 

as opposed to:

function Foo(){ }  Foo.prototype.bar = [] var fooObj1 = new Foo(); var fooObj2 = new Foo();  fooObj1.bar.push("x"); alert(fooObj2.bar) //["x"] 
like image 104
Ben McCormick Avatar answered Nov 13 '22 05:11

Ben McCormick