JS: Define a Class Without class

By Xah Lee. Date: . Last updated: .

This page shows you how to define a class, in different ways.

first, normally, with keyword class. then:

Using Keyword class

Suppose we want to define a class Fcon, with a constructor Fcon(x) that adds a property key xprop with value x, and one prototype method method1, and one static method staticm1.

// Using Keyword class

class Fcon {
 constructor(x) {
  this.xprop = x;
 }

 static staticm1(x) {
  return "staticm1 " + x.toString();
 }

 method1(x) {
  return "method1 " + x.toString();
 }
}

// s------------------------------

console.assert(Fcon.staticm1(3) === "staticm1 3");

const xobj = new Fcon(4);

console.assert(Object.hasOwn(xobj, "xprop") === true);
console.assert(xobj.xprop === 4);

console.assert(xobj.method1(2) === "method1 2");

console.assert(Reflect.getPrototypeOf(xobj) === Fcon.prototype);
console.assert(xobj.constructor === Fcon);

Without Keyword class

// define a class without Keyword class

function Fcon(x) {
 this.xprop = x;
}

Fcon.staticm1 = function (x) {
 return "staticm1 " + x.toString();
};

Fcon.prototype.method1 = function (x) {
 return "method1 " + x.toString();
};

// s------------------------------

console.assert(Fcon.staticm1(3) === "staticm1 3");

const xobj = new Fcon(4);

console.assert(Object.hasOwn(xobj, "xprop") === true);
console.assert(xobj.xprop === 4);

console.assert(xobj.method1(2) === "method1 2");

console.assert(Reflect.getPrototypeOf(xobj) === Fcon.prototype);
console.assert(xobj.constructor === Fcon);

Without Keywords class, new, this

// define a class without Keyword class new this

const Fcon = (x) => {
 const resultObj = Object.create(Fcon.prototype, {});
 resultObj.xprop = x;
 return resultObj;
};

Fcon.staticm1 = function (x) {
 return "staticm1 " + x.toString();
};

Fcon.prototype = {
 method1: function (x) {
  return "method1 " + x.toString();
 },
 constructor: Fcon,
};

// s------------------------------

console.assert(Fcon.staticm1(3) === "staticm1 3");

const xobj = Fcon(4);

console.assert(Object.hasOwn(xobj, "xprop") === true);
console.assert(xobj.xprop === 4);

console.assert(xobj.method1(2) === "method1 2");

console.assert(Reflect.getPrototypeOf(xobj) === Fcon.prototype);
console.assert(xobj.constructor === Fcon);

Without Keywords class, new, this, function

// define a class without Keyword class new this function

const Fcon = (x) => {
 const resultObj = Object.create(Fcon.prototype, {});
 resultObj.xprop = x;
 return resultObj;
};

Fcon.staticm1 = (x) => {
 return "staticm1 " + x.toString();
};

Fcon.prototype = {
 method1: ((x) => {
  return "method1 " + x.toString();
 }),
 constructor: Fcon,
};

// s------------------------------

console.assert(Fcon.staticm1(3) === "staticm1 3");

const xobj = Fcon(4);

console.assert(Object.hasOwn(xobj, "xprop") === true);
console.assert(xobj.xprop === 4);

console.assert(xobj.method1(2) === "method1 2");

console.assert(Reflect.getPrototypeOf(xobj) === Fcon.prototype);
console.assert(xobj.constructor === Fcon);

JavaScript. Constructor, Class