函数作为键返回

时间:2017-01-27 15:22:35

标签: function stack

新手问题在这里......我使用功能模式构建一个简单的堆栈,并将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)

1 个答案:

答案 0 :(得分:0)

你说&#34;显然&#34;你不希望对象包含这些功能的键,但我想我并不是那么明显......那么你最终想要的是什么呢?在JavaScript中,函数引用只是另一条数据,而方法只是一个函数引用,存储为对象上某些键的值。

如果您希望用户能够说obj.push(...),那么您 想要push上的obj密钥(以便obj.push你想要它的值是一个函数(以便()运算符可以应用于它)。

现在我很好奇,因为您的输出块表示密钥为xPushxPop,但这些密码不是您在代码块中显示的值。这是因为在问题中编辑了吗?如果不是,我不知道你的表现方式如何。