2016-08-03 10 views
0

を使用しての違いMozillaのMDNで直接オブジェクトのプロパティを使用して返す関数

Iは

console.log(Animal.displayType()); \\Invertebrates

を行う場合、私は、例えばだから

var Animal = { 
    type: "Invertebrates", // Default value of properties 
    displayType : function() { // Method which will display type of Animal 
    return this.type; 
    } 


} 

次ました

console.log(Animal.type); \\Invertebrates

どちらもアウトプットが同じであるので、機能

または何直接、または使用して、オブジェクトの内部プロパティを返すための正しい方法だろうのプロパティを返すためにメソッドを使用してのポイントは何ですか関数 ?

おかげ&よろしく

+1

この場合、あまりありません。それ以外の場合は、IEが返される前にプロパティへの何らかのデータ操作を行っている可能性があります。 – tymeJV

+0

@tymeJVありがとう、私はその愚かな質問を知っているが、深いJSを学ぶことを試みて以来、ここでも疑問を尋ねる良いことを感じた – Vikram

答えて

3

点は、この関数が返すものを計算するのではなく、プロパティからそれを読むことです。

一般に、getterやsetterのような関数は、カプセル化を強化し、変更に対してより弾力性のあるデザインをもたらすと言われています。これに加えて、セッターはイベントをトリガーするかもしれませんが、プロパティへの単純な割り当てではできないものがあります。

ところで、実際には、他のすべての言語ではプロパティはgetterとsetterを介してのみアクセス可能なものなので、JSの名前は非常に不幸です。

Java Beanが作成されたときに、関数を介してのみ属性にアクセスすると、Beanボックスというツールの使用が容易になりました。それが何であるか気にしないでください。

どこにでもゲッターやセッターを適用することは邪魔になり、まったく必要ありません。プログラムによって要因が簡単に遅くなる可能性があります。

私が記述した理由から、それらは必要なときに非常に強力です。あなたの現在のデザインだけでなく、将来の変更についても考えてください。しかしゲッターやセッターをどこにでも追加すると、コードを遅くするだけでなく、ソースコードの量が爆発的になり、それ自体が将来の変更に支障をきたすことになります。

だから、あなたはそれが収まると考える場合は、それらを使用していますが、上記のすべての常識を好むことができます...

+0

オブジェクト指向のJs少しでも私はまだ機能ベースの実装がより速いと感じる巨大フォームの検証やSPA、私はオブジェクト指向のアプローチがより適用可能だと思う – Vikram

0

あなたの周りにそれらを渡す際に違いがあります。 Animal.typeを関数に渡すと、immediatly型が返されますが、関数を渡すと、後で実行してその型を将来の点で取得できます。

私のコードでAJAX呼び出しがあり、成功メソッドではその型に基づいて何かしたいと思います。関数に型を渡すと、成功関数が呼び出される前に型が変更される可能性があります。この場合、成功した時点で型を計算できるので、関数を持つ方が良いです。

は、次のコードを考えてみましょう: -

function test(typeProp, typeFunc) { 
    $.ajax({ 
     url: '/GetTest', 
     success: function() { 
      if(typeProp === 'Cat') { 
       //do something 
      } 
      if(typeFunc() === 'Cat') { 
       //do something 
      } 
     } 
    }) 
} 

var Animal = { 
    type: "Cat", // Default value of properties 
    displayType : function() { // Method which will display type of Animal 
    return this.type; 
    } 

test(animal.type, animal.displayType); 
animal.type = 'Dog'; 

コードが成功関数に到達したら、typePropは「猫」になりますが、typeFuncは「犬」を返します。

0

時々、あなたは他のいくつかの情報を返すために、そのプロパティを使用したい:

例:あなたは単語(dictionnary)の説明を返し、「無脊椎動物」のマッピングを持っています。したがって、displayDefinition()を呼び出すことによって、定義が得られます。

displayDefinition: function() { 
    return dictionnaryFind(this.type); 
    } 
関連する問題