我尝试运行此代码,但控制台显示此错误消息。
异常:TypeError:undefined不是对象(评估'Stack()。push')
我知道替代方法是使用原型来完成此代码,但我正在尝试研究这种模式。 请让我知道解决此错误。
var Stack = function() {
this.repository = [1];
debug('current this.repository: ' + this.repository);
function push(data) {
debug('this: ' + this);
debug('current this.repository: ' + this.repository);
debug('after pushing data: ' + this.repository);
}
function pop() {
if (!this.repository.length) {
return null;
}
var result = this.repository[this.repository.length - 1];
this.repository = this.repository.slice(0, this.repository.length - 1);
debug('after poping data: ' + this.repository);
return result;
}
};
Stack().push(9);
Stack().push(10);
Stack().pop();
答案 0 :(得分:0)
您需要使用new
进行构造函数调用。以及公共方法的一些任务。
var Stack = function () {
this.repository = [1];
document.write('current this.repository: ' + this.repository + '<br>');
function push(data) {
document.write('this: ' + this + '<br>');
document.write('current this.repository: ' + this.repository + '<br>');
this.repository.push(data); // was missing
document.write('after pushing data: ' + this.repository + '<br>');
}
function pop() {
if (!this.repository.length) {
return null;
}
var result = this.repository[this.repository.length - 1];
this.repository.slice(0, this.repository.length - 1); // works without assignment
document.write('after poping data: ' + this.repository + '<br>');
return result;
}
this.pop = pop;
this.push = push;
};
var stack = new Stack();
document.write('stack.push(9) ' + stack.push(9) + '<br>');
document.write('stack.push(10) ' + stack.push(10) + '<br>');
document.write('stack.pop() ' + stack.pop() + '<br>');
&#13;
如果不使用new
,则可以使用以下模式:
var Stack = {
repository: [1],
push: function (data) {
document.write('this: ' + this + '<br>');
document.write('current this.repository: ' + this.repository + '<br>');
this.repository.push(data); // was missing
document.write('after pushing data: ' + this.repository + '<br>');
},
pop: function () {
if (!this.repository.length) {
return null;
}
var result = this.repository[this.repository.length - 1];
this.repository.slice(0, this.repository.length - 1);
document.write('after poping data: ' + this.repository + '<br>');
return result;
}
};
document.write('Stack.push(9) ' + Stack.push(9) + '<br>');
document.write('Stack.push(10) ' + Stack.push(10) + '<br>');
document.write('Stack.pop() ' + Stack.pop() + '<br>');
&#13;