2016-07-14 35 views
0

雖然期待通過爲環我看到下面的代碼:什麼是next(){}裏面的對象?

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聲明。

+0

'下一個()'是一個迭代器發電機。因此,它會在每次迭代中爲「i」變量添加+1 –

+0

查看更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next –

+0

@Juhana In你可能重複的問題,甚至我可以看到對象字面值內的'property:value'聲明,這是我的興趣沒有'property:value'。 –

回答

2

next() {}對象內部是es6 shortform。

在預ES6它會被寫爲next: function() {}爲自己的邏輯,你可以使用編譯器,如通天或者只是把它寫爲

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

本質,對象可以包含其他對象和這些對象,也可以功能。當你將頭部纏繞在頭上時,它非常強大。

編輯:爲更好的legibilty

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 
+0

'var obj = {foo:1,bar(){}}'等於'var obj = {foo:1,bar:bar}',但不是'var obj = {foo:1,bar:bar ()}',因爲'bar'會因爲'()'而立即被調用,結果會被存儲在屬性'bar'中。 –

+0

是的。你是對的。感謝您指出它。編輯答案 – Arif

+0

加一個答案。但不能接受這兩個答案。 –

相關問題