2012-01-09 7 views
2

こんにちは、私はJavaScriptに新しいと私はJavaScriptでこのコードにつまずいた。私はどのようにメソッドのインクリメントと印刷機能内で定義されることができます理解していない。それはcreateがオブジェクトであることを意味しますか?javascript関数オブジェクトメソッド

function create() { 
    var counter = 0; 
    return { 
     increment: function() { 
      counter++; 
     }, 
     print: function() { 
      console.log(counter); 
     } 
    } 
} 
var c = create(); 
c.increment(); 
c.print(); // 1 
+0

[online JavaScript beautifier](http://jsbeautifier.org)のようなサービスを使って、面倒なコードを整理することができます。 – Pointy

答えて

1

関数 "create()"はオブジェクトを返します。それが返すオブジェクトには、「増分」と「減分」という2つのプロパティがあり、どちらも値としての機能を持っています。関数は、 "create()"で定義された変数 "counter"で動作します。

"create()"を呼び出すたびに、 "closure"という新しいコンテキストがインスタンス化されます。コンテキストは、「カウンタ」変数の新しいコピーを囲みます。したがって、 "create()"の呼び出しから返されたオブジェクトは、独自のプライベート "カウンタ"インスタンスにアクセスできます。

+0

答えをありがとう、私は初心者の質問のために私を許してください、私はジャバスクリプトに新しいことを言ったように。 私はあなたの答えに2つのサブ質問があります - "create()"関数が返すオブジェクト、またはその名前propherty、 の違いは何ですか? "create()"戻り値のオブジェクトや、 javascriptのクラス –

+0

オブジェクトは特に実際には何も呼び出されません。人々はそれを「オブジェクトリテラル」と呼ぶことがあります。言語に関しては、JavaScriptには1種類の関数しかありません。どの関数もオブジェクトコンストラクタとして使うことができますが、関数が実際に何をするのかはあまり意味がないかもしれません。 JavaScriptでOOPを行うための多くのスキームがありますが、実際の言語メカニズムはC++、C#、JavaのOOPに非常に似ていません。 – Pointy

+0

(ここには2018年にはさまざまな種類の機能があります) – Pointy