Javascript 无法在对象的属性中推送元素

Javascript 无法在对象的属性中推送元素,javascript,arrays,Javascript,Arrays,我正在构建一个堆栈,但我不知道为什么在尝试推送时会得到:“无法读取未定义的属性‘push’” 函数堆栈(n){ 返回{ 尺寸:n, 要素:[], 推送:(项目)=>{ if(this.elements.length{ 如果(n!==0){ 返回n!==0?this.elements.pop():“堆栈下溢”; } }, isEmpty:()=>{ 返回this.elements==未定义; }, isFull:()=>{ return elements.length==n?true:false;

我正在构建一个堆栈,但我不知道为什么在尝试推送时会得到:“无法读取未定义的属性‘push’”

函数堆栈(n){
返回{
尺寸:n,
要素:[],
推送:(项目)=>{
if(this.elements.length{
如果(n!==0){
返回n!==0?this.elements.pop():“堆栈下溢”;
}
},
isEmpty:()=>{
返回this.elements==未定义;
},
isFull:()=>{
return elements.length==n?true:false;
},
};
};

发生了什么事?非常感谢。

在下面的代码中,如果this.elements===未定义,请尝试此.elements.push(1)。在使用.push()之前,需要实例化this.elements

if(this.elements==未定义| | this.elements.length
我真的不明白你想做什么,但你需要这样做

if (this.elements === undefined || this.elements.length < this.size) {
    this.elements = <instantiate it here>;
    this.elements.push(1);
    return this.elements;
if(this.elements==未定义| | this.elements.length
我稍微修改了您的代码,它工作正常。基本上,它初始化一个大小为n的堆栈,n=number。然后它执行与大小n相关的方法

 function stack(n) {
  return {
    size: n,
    elements: [],
    push: function(item){
      if (this.elements.length < this.size) {
        this.elements.push(1);
        return this.elements;
      } else {
        return 'Stack Overflow';
      }
    },
    pop: function(){
        return (this.size !== 0 && this.elements.length) ? this.elements.pop() : 'Stack Underflow';
    },
    isEmpty: function(){
      return (this.elements.length < this.size) ? true : false;
    },
    isFull: function(){
      return (this.elements.length == this.size) ? true : false;
    },
  };
};
现在调用这些方法,看看它在做什么

    init.pop()
   "Stack Underflow"

    init.isEmpty()
    true

    init.isFull();
    false

    init.push(33)
    [1]

    init.push(67)
    [1, 1]

    init.push(3432)
    "Stack Overflow"

如果(this.elements===undefined…this.elements.push(1)
-确定?;)我理解您在这里尝试执行的操作。请等待我的回答。抱歉,我想添加该项。我得到一个“无法读取未定义的属性'length'”但是元素是初始化的。问题是我已经初始化了上面的元素,但是我没有定义。我认为Faiz99上面的答案是正确的。确保你的旧javascript没有被缓存。在push函数中使用调试器,看看push函数中定义了哪些元素和this.elements
 function stack(n) {
  return {
    size: n,
    elements: [],
    push: function(item){
      if (this.elements.length < this.size) {
        this.elements.push(1);
        return this.elements;
      } else {
        return 'Stack Overflow';
      }
    },
    pop: function(){
        return (this.size !== 0 && this.elements.length) ? this.elements.pop() : 'Stack Underflow';
    },
    isEmpty: function(){
      return (this.elements.length < this.size) ? true : false;
    },
    isFull: function(){
      return (this.elements.length == this.size) ? true : false;
    },
  };
};
var init = stack(2);
    init.pop()
   "Stack Underflow"

    init.isEmpty()
    true

    init.isFull();
    false

    init.push(33)
    [1]

    init.push(67)
    [1, 1]

    init.push(3432)
    "Stack Overflow"