2011-10-28 12 views
0

私はダミーのコンストラクタオブジェクトがある場合:JavaScriptでオブジェクトのプロトタイプのプロパティを反復処理するにはどうすればよいですか?

function Circle() 
{ 
    this.radius = 3; 
} 

をこのオブジェクトのインスタンスは、単一の「半径」プロパティを持っているでしょう。 a)コンストラクタオブジェクトに、それが持つプロパティの数を問い合わせるにはどうすればよいですか?

b)Circle.prototypeのプロパティの数はどのように問い合わせますか? console.log(Object.getOwnPropertyNames(Circle.prototype))ような何かをしようとすると、あなたは間違っているいくつかの用語のものを持って何でも

+3

これはプロトタイプではありません。 – SLaks

答えて

1

を返しません。

  1. "コンストラクタオブジェクトをクエリしません"。実際のオブジェクトのプロパティは列挙できますが、コンストラクタ関数は列挙できません。
  2. コード例でプロパティを作成する方法では、オブジェクトのprototypeを使用していないため、オブジェクトのプロトタイプを反復処理する場合は、radiusプロパティは表示されません。

あなたが本当に言うことを意味したものと仮定している:「私は私のサークルオブジェクトのインスタンスのプロパティを反復処理する方法を教えてください」、その答えは次のようになります:

function Circle() 
{ 
    this.radius = 3; 
    this.border = 1; 
    this.color = "red"; 
} 

var obj = new Circle(); 
for (var i in obj) { 
    // hasOwnProperty makes sure we get properties only of Circle, 
    // not of ancestors like Object 
    if (obj.hasOwnProperty(i)) { 
     // i will be properties of obj on each iteration 
     console.log(i);  // radius, border, color 
    } 
} 

のプロトタイプオブジェクトは別のものです。オブジェクトの新しいインスタンスがすべて自動的に継承する構造のように考えることができます。あなたはこのようにプロトタイプを使用することができます。

function Circle(r) 
{ 
    this.radius = r; 
    this.border = 1; 
    this.color = "red"; 
} 

Circle.prototype.calcArea = function() { 
    return(Math.PI * this.radius * this.radius); 
} 

Circle.prototype.calcCircumference = function() { 
    return(Math.PI * this.radius * 2); 
} 

これは自動的にサークル、二つの方法石灰海綿綱とcalcCircumferenceのすべてのインスタンスを提供します。

var cir = new Circle(4); 
console.log(cir.calcArea()); // 54.624 

また、あなたはアレイなどのコードを持っていない既存のオブジェクト(あなたがこれを行う際に注意する必要がありますが)のプロトタイプにメソッドを追加することができます。例:

Array.prototype.isSorted = function() { 
    for (var i = 1; i < this.length; i++) { 
     if (this[i] < this[i-1]) { 
      return(false); 
     } 
    } 
    return(true); 
} 

var x = [1,3,6,8]; 
var y = [1,3,8,6]; 

console.log(x.isSorted()); // true 
console.log(y.isSorted()); // false 
+0

@ jfriend00コンストラクタ関数とオブジェクトのプロトタイプの違いは何ですか?私は混乱していると思います。 'function Circle()' '{' 'this.radius = 3;' '}' 'var cir = new Circle();' 'console.log(cir.prototype); //未定義を返す?? ' – user1019031

+0

私は実際のプロトタイプのいくつかのサンプルの使用方法を示すために私の答えにもっと追加しました。 – jfriend00

+0

@ user1019031:あなたの受け入れた回答をマークすることを忘れないでください... – Alex

1

hasOwnProperty

var cir = new Circle(); 
var j = 0; 
for(var i in cir) { 
    if (cir.hasOwnProperty(i)) { 
     j++; 
    } 
} 

j == 1; // true 
関連する問題