内部对象的下一个(){}是什么?

时间:2016-07-14 09:00:34

标签: javascript

在查看for-of循环时,我看到以下代码:

var iterable = {
  [Symbol.iterator]() { /* 1. I don't understand, will look later*/
    return {
      i: 0,
      next() { /* 2. New to me how next(){} is used inside object? */
        if (this.i < 3) {
          return { value: this.i++, done: false };
        }
        return { value: undefined, done: true };
      }
    };
  }
};

for (var value of iterable) {
  console.log(value);
}
// 0
// 1
// 2

为了简化我的问题,我试图用我自己的逻辑来理解:

function bar(){
  return 1;
}
var obj = {foo: 1, bar(){}}
console.log(obj); /* I get nothing error, so this is good */
console.log(obj.bar()); 
/* Just trying to know if this works, but I get undefined*/ 

那么在对象文字中使用func(){}有什么用呢?我只在对象文字中看到了property:value声明。

2 个答案:

答案 0 :(得分:2)

对象中的

next() {}是es6短格式。

在pre es6中,它将被编写为next: function() {}用于您自己的逻辑,您可以使用像Babel这样的编译器,或者只是将其写为

var obj = {
  foo: 1, 
  bar: function(){ 
    // return data here 
  }
}

基本上,对象可以包含其他对象,这些对象也可以是函数。当你绕过它时它非常强大。

编辑:格式化的答案,以获得更好的可怜

答案 1 :(得分:2)

回答简化问题: 首先,将bar定义为返回1的函数。 然后在obj内部将其定义为空白函数。 当您在对象内部传递函数时,它会获得key作为函数名称和此函数的值。

以下代码

var obj = {foo: 1, bar(){}}

等于

var bar = function() {}
var obj = {foo: 1, bar: bar}

然而,如果你这样做

var obj = {foo: 1,bar(){return 1}}
console.log(obj.bar()) //output will be 1