新手问题在这里......我使用功能模式构建一个简单的堆栈,并将push和pop函数作为键返回(我当然不想这样)......我真的不确定为什么。该功能正常运行,只需返回这两个额外的键......
这就是回报的样子......
{ size: 2,
storage: { '1': 'test0', '2': 'test1' },
push: [Function], <== don't want
pop: [Function] } <== don't want
[Finished in 0.1s]
function Stack () {
var obj = {};
obj.size = 0;
obj.storage = {};
obj.push = function(data) {
var newSize = ++obj.size;
obj.storage[newSize] = data;
};
obj.pop = function() {
var newSize = obj.size;
var deletedData;
if (newSize) {
deletedData = obj.storage[newSize];
delete obj.storage[newSize];
obj.size--;
return deletedData;
}
};
return obj;
};
var stack = new Stack();
stack.push('test0')
stack.push('test1')
stack.push('test2')
stack.pop()
console.log(stack)
答案 0 :(得分:0)
你说&#34;显然&#34;你不希望对象包含这些功能的键,但我想我并不是那么明显......那么你最终想要的是什么呢?在JavaScript中,函数引用只是另一条数据,而方法只是一个函数引用,存储为对象上某些键的值。
如果您希望用户能够说obj.push(...)
,那么您 想要push
上的obj
密钥(以便obj.push
你想要它的值是一个函数(以便()
运算符可以应用于它)。
现在我很好奇,因为您的输出块表示密钥为xPush
和xPop
,但这些密码不是您在代码块中显示的值。这是因为在问题中编辑了吗?如果不是,我不知道你的表现方式如何。