Loading [MathJax]/extensions/tex2jax.js

2011年4月30日土曜日

constructorプロパティ(JavaScript)

■ constructorプロパティの利用


JavaScriptでは、constructorプロパティを呼ぶことで自分を生成したオブジェクトのコンストラクタ関数を呼ぶことが出来ます。

  1. function MyObject(x) {  
  2.    this.x = x;  
  3. }  
  4.   
  5. var my = new MyObject(1);  
  6.   
  7. document.writeln("MyObject: " + my.constructor);   

このような結果になります。

  1. MyObject: function MyObj(x) {  this.x = x; }  

これは、定義した関数を表示しただけなので元の関数を変数として使用したものと同じ結果になります。

  1. document.writeln((my.constructor == MyObj)); <i class="comment">// true</i>  

これを使用してインスタンスの直接のオブジェクトが調べられます。

  1. var arr = new Array(1, 2, 3, 4, 5);  
  2. document.writeln(arr.constructor == Array); <i class="comment">// true</i>  
  3. document.writeln(arr.constructor == Object); <i class="comment">// false</i>  
  4. document.writeln(arr instanceof Object); <i class="comment">// true //instanceof演算子だとスーパークラスにもtrueになる</i>  

また基本型もラップされてラッパーオブジェクトとして評価されます。
  1. document.writeln((1).constructor == Number); <i class="comment">// true</i>  
  2. document.writeln(("文字列").constuctor == String); <i class="comment">// true</i>  
  3. document.writeln((function() {}).constructor == Function); <i class="comment">// true</i>   

以上からconstructorプロパティはインスタンスが何のオブジェクトから生成されたか判定できるので有用です。

■ Objectオブジェクトの不思議な挙動


Objectオブジェクトのインスタンスでconstructorプロパティを生成する場合、引数を入れたObjectのインスタンスと比べるとエラーになります。

  1. var obj = new Object();  
  2. document.writeln(obj.constructor == Object); <i class="comment">// true</i>  
  3.   
  4. obj = new Object(1);  
  5. document.writeln(obj.constructor == Object); <i class="comment">// false</i>  

なんだか変ですね。

参考:https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Object/constructor

Pythonで地図空間データを扱う⑤

ベースの地図が出来た所で、他のデータを被せてみます。 国土地理院の  500mメッシュ別将来推計人口データ  を使用します。 同じく神奈川県のデータ  500m_mesh_suikei_2018_shape_14.zip をダウンロードします。 ベースの地図データと同じ場所に展開...