2016-07-14 3 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

'次の()'イテレータジェネレータですが

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

に等しいです。それで各反復で 'i'変数に+1を加えます –

+0

もっと見る:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next –

+0

@Juhana Inあなたの重複する可能性のある質問でさえ私は 'property:value'宣言がオブジェクトのリテラルの中にあることがわかります。 –

答えて

2

next() {}オブジェクト内のes6ショートフォームです。事前にこのようなバベルとしてコンパイラを使用するか、単に基本的に

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

としてそれを書くことができ、オブジェクトは他のオブジェクトを含むことができ、それらのオブジェクトにもすることができ、それはあなた自身のロジックにnext: function() {}のように書かれることになるES6で

機能。それはあなたがそれの周りにあなたの頭を包むときに非常に強力です。

編集:あなたの簡略化の質問にフォーマットされた、より良いlegibiltyのための答え

2

回答: まず、1を返す関数としてbarを定義します。 objの中では、空白の関数として定義します。 オブジェクト内に関数を渡すと、関数名とこの関数の値としてkeyが得られます。

var obj = {foo: 1, 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

と編集しました。しかし両方の答えを受け入れることができませんでした。 –

関連する問題