简体   繁体   中英

How to create OOP Class in Javascript

I'm hesitant to use just any tutorial because I know how those tutorials can end up being, teaching you bad ways to do things. I want to setup a class in Javascript, so that I can just do

var vehicle = new Vehicle(el);
var model = vehicle->getModel();

These functions would read the HTML and get and manage the elements on the page. I'm current doing a setup like...

var model = function () {
 return {
  getName: function () {

  },
  getVehicleCount: function () {

  },
  incrementCount: function (id) {
   console.log(x);
  }
 }
}();

I'm still learning classes in Javascript... I'd like to be able to pass the class a node for the element all of the methods will use, but I'm not sure I'm doing this right...

There is no such thing as a class in JavaScript, instead everything in JavaScript is an object.

To create a new object you define a function that uses the this keyword in it (a “constructor function”), and then call it with the new operator:

function Foo (id) { // By convention, constructor functions start with a capital letter
    this.id = id;
}

var foo1 = new Foo(1);
var foo2 = new Foo(2);

However, these objects have no methods. To add methods, you need to define a prototype object on their constructor function:

Foo.prototype = {
    getId: function () {
        return this.id;
    }
}

This new getId function will be usable by all Foo objects. However, as was stated, there are no classes in JavaScript and as such there are other constructs you will use in order to produce different results.

I highly recommend the videos by Douglas Crockford in which he explains much of the javascript OO nature. The talks can be found here:

http://developer.yahoo.com/yui/theater/

Douglas Crockford — The JavaScript Programming Language

Douglas Crockford — Advanced JavaScript

Those will give you a basic understanding of the structure of javascript and should help the transition from classical to functional programming.

Although there are no classes in JavaScript, you can create constructor functions. A constructor function works by binding methods to an objects prototype. There are several ways to do this, each with advantages and disadvantages. I personally prefer the most straigthforward way, which works by appending methods to "this":

var Constructor = function() {

  //object properties can be declared directly
  this.property = "value";

  //to add a method simply use dot notation to assign an anonymous function to an object
  //property
  this.method = function () {
    //some code
  }

  //you can even add private functions here. This function will only be visible to this object methods
  function private() {
    //some code
  }
  //use return this at the end to allow chaining like in var object = new Constructor().method();
  return this; 

}

There is nothing like classes in JavaScript. JavaScripts inheritance works with prototypes. You can take a look at base2 , which mimics class-like behaviour in JavaScript.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM