2016-04-24 6 views
0

以下の両方のJSクラスの出力が同じであるため、プロトタイプで特別なのは何ですか?JS関数内のメソッドとそのプロトタイプの違いは何ですか?

プロトタイプの特徴の1つは、重複したコードを取り除くことです。これはプロトタイプで可能ですか?

1.

function Person(name) { 
     this.name = name; 
     this.sayName = function() { 
      console.log(this.name); 
     }; 
    } 
    var person1 = new Person("Nicholas"); 
    person1.sayName(); 

2.

function Person(name) { 
     this.name = name; 
    } 
    Person.prototype.sayName = function() { 
     console.log(this.name); 
    }; 
    var person1 = new Person("Nicholas"); 
    person1.sayName(); 
+0

番号1は、クラスに属するメソッドです。番号2は、インスタンス化されたオブジェクトに属するメソッドです。 –

+0

いいえ、プロトタイプのメソッドは重複したコードを取り除きません。 – Bergi

答えて

0

あなたはprototypeを使用してプロパティを割り当てる場合、これらのプロパティは、のすべてのインスタンス全体を通して共有されますクラス/コンストラクタこれは特にprototype。しかし、コンストラクタ内にthisを使ってプロパティを割り当てると、インスタンス固有のものになります。他のインスタンスと共有することはできません。各インスタンスは、それぞれ独自の値を持ちます。

+0

それはプロパティの場合は何も "プライベート"ですか? – Bergi

+1

@Bergi私が言ったのは、それらのプロパティはインスタンスに対してプライベートであるということでした。他のインスタンスは共有できません。すべてのインスタンスは、それらのプロパティに独自の価値があります。 –

+1

彼らは他のインスタンスと共有していませんが、「プライベート」とは通常、「アクセスできない」という意味です。代わりに、「インスタンス固有の」という用語を使用することをお勧めします。 – Bergi

関連する問題