Paulos3000
Paulos3000

Reputation: 3545

Calling one method of an object in another

I have a prototype:

var myClass = function() {};

I have a method on that class:

myClass.prototype.method1() = function() {
   return x;
}

I then have a second method which I declare in the same way, but I want to access the result of method1() in it. But this doesn't work, and I'm not sure why...

myClass.prototype.method2() = function() {
   return myClass.method1();
}

I get TypeError: myClass.method1 is not a function

Can anyone point out what's syntactically/conceptually wrong with this? And suggest any improvements?

Also I'm not 100% I'm using the terms 'class' and 'prototype' correctly in this instance. If anyone can correct the terminology, or point out any other terminology associated with this kind of process I'd appreciate it!

Thanks in advance.

Upvotes: 0

Views: 53

Answers (3)

Vandesh
Vandesh

Reputation: 6894

var myClass = function() {};

This is a constructor and not a prototype. Here's a quick read explaining the difference.

You can call it using this. Here's the best place for a brush up.

const MyClass = function() {};

MyClass.prototype.method1 = function() {
   return x;
}

MyClass.prototype.method2 = function() {
   return this.method1(); 
}

Also, no need for brackets in function definitions of method1 and method2

Upvotes: 1

Riad
Riad

Reputation: 3850

The JS oop has some difference between public and privileged methods.

myClass.method1(); is A static method calling. it's just like a normal function and has no relation with any myClass object instance.

So you need to call it using the Full namespace:

MyClass.method1()

Upvotes: 0

Madara's Ghost
Madara's Ghost

Reputation: 174957

That's because (using rough OO terminology), method1() is an instance method, and you're trying to call it as a static method.

const MyClass = function() {}; // MyClass is a constructor

MyClass.prototype.method1() = function() {
   return x;
}

MyClass.prototype.method2() = function() {
   return this.method1(); // Call it as an instance
}

or, alternatively:

const MyClass = function() {};

MyClass.method1() = function() { // "static" method
   return x;
}

MyClass.prototype.method2() = function() {
   return MyClass.method1(); // Call it as a "static"
}

Worth noting that this terminology is misleading, there are no static or instance methods (in fact, there are no methods in JavaScript, only functions, and properties that hold references to functions).

Upvotes: 0

Related Questions