Javascript 无法在对象的属性中推送元素
我正在构建一个堆栈,但我不知道为什么在尝试推送时会得到:“无法读取未定义的属性‘push’”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;
函数堆栈(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"