2017-04-16 4 views
0

現在、私はオブジェクトについて学んでおり、いくつかの単語や説明の用語についてはわかりません。 - 私は必ずいくつかは、ここで私を助けることができます:)JSのOOPに関するいくつかの基本的な質問

コード例:

function Person(name) { 
    this.name = name, 
    this.introduce = function() { 
     console.log("My name is " + this.name); 
    } 
} 

var jon = new Person("Jon") 
jon.introduce(); 

私の質問:

  1. が実際に上記のコードと、次の間に差がありますコード:

    var Person = function(name) { 
        this.name = name, 
        this.introduce = function() { 
         console.log("My name is " + this.name); 
        } 
    } 
    
    var jon = new Person("Jon") 
    jon.introduce(); 
    

1つはより良い練習ですか?私はコードが少ないので、最初のコードスニペットを推測します。

  1. ここでは用語を使用します。

2.1最初のコード例では、次のスニペットを「プロトタイプ」と呼びますか?

function Person(name) { 
     this.name = name, 
     this.introduce = function() { 
      console.log("My name is " + this.name); 
     } 
    } 

2.2最初のコード例では、次のスニペットをコンストラクタ(-function)と呼びますか?

var jon = new Person("Jon") 

ありがとう、幸せな東部! :)

+0

これは3つの質問であり、あなたは、3つの別々のポストにそれらを破る必要があります。それ以外の場合は、訪問者が検索するのがさらに難しくなり、トピックが広すぎます。 – Rob

答えて

2

ポイント1:大きな言葉

function Person(name) { 
    this.name = name, 
    this.introduce = function() { 
     console.log("My name is " + this.name); 
    } 
} 

var jon = new Person("Jon") 
jon.introduce(); 

この関数は、名 '人' を有します。これは機能文と呼ばれます。

var Person = function(name) { 
    this.name = name, 
    this.introduce = function() { 
     console.log("My name is " + this.name); 
    } 
} 

var jon = new Person("Jon") 
jon.introduce(); 

このファンクションは匿名であり、名前はありません。名前を割り当てることができますが、変数を関数の実行に使用できるので、 は必須ではありません。これは関数式と呼ばれます。

あなたはここにファンクション文と式の詳細を読むことができます:

https://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

ポイント2:実行(巻き上げ)機能があるために定義された後に呼び出されなければならない変数に代入

機能吊り上げ作業の方法。

したがって、ファーストケースファンクションは、が定義されています。

第2の場合は、の後に呼び出さなければなりません。それは変数に格納されているためです。関数の前にそれを呼び出すと、undefinedが返されます。それはエラーを与えません。変数はメモリ空間にありますが、その時点では定義されていません。

あなたがここに巻き上げ変数と関数の詳細を読むことができます:

http://adripofjavascript.com/blog/drips/variable-and-function-hoisting

ポイント3:Functionコンストラクタ:お使いの場合には

を機能するために使用する用語は、「Functionコンストラクタです "を使用します。基本的に、関数をPersonオブジェクトのコンストラクタとして使用して、そのプロパティを定義しているからです。

1
  1. これは単にfunction expression vs. declarationの違いです。変数に割り当てられた名前のない無名関数の代わりに、一見単純な宣言を使用します。スニペット

    1. jon.constructorによって返さコンストラクタ関数を示しています。 Object.getPrototypeOf(jon)またはPerson.prototype経由でアクセスできるコンストラクタ関数で構築された人のプロトタイプはかなり空です。 this.name = nameを割り当てると、名前属性はプロトタイプに追加されず、現在作成されているオブジェクトに追加されます。

    2. 新しく構築されたオブジェクトを返すコンストラクタ関数には、new operatorが適用されます。

関連する問題