I am trying to implement a stack. when I try to push into the arr this error pops up
TypeError: Cannot read property 'push' of undefined
var MinStack = function() {
let Min = null;
const arr = new Array(); // I also tried arr = []
};
/**
* @param {number} x
* @return {void}
*/
MinStack.prototype.push = function(x) {
this.arr.push(x);
this.Min = Math.min(...arr);
};
I searched for answers but I didn't find out why can't I access my arr in the constructor?
This is because this.arr is not defined.
You have defined the arr as a variable as you have used let to declare it, but not as a property of the instances of MinStack.
Variables declared using let or const are scoped to the enclosing block and not available outside of it.
The enclosing block in your case the function block, so it becomes a local variable scoped to the function and not visible outside of it.
When you use a function as a constructor and use the new keyword to instantiate it a new object is created in memory and is assigned to the this reference in the constructor function. properties assigned to that this reference become properties of the instance created from the constructor function:
var MinStack = function() {
this.Min = null;
this.arr = new Array();
};
/**
* @param {number} x
* @return {void}
*/
MinStack.prototype.push = function(x) {
this.arr.push(x);
this.Min = Math.min(...this.arr);
};
MinStack.prototype.min = function(x) {
return this.Min;
};
const minArr = new MinStack();
minArr.push(1);
minArr.push(2);
minArr.push(3);
minArr.push(-9);
console.log(minArr.min());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With