JavaScriptのオブジェクト指向 (7/7)
作成:2010-04-03 09:45
更新:2010-05-11 17:18
更新:2010-05-11 17:18
■プロパティ・メソッドのアクセス制限
多くのオブジェクト指向言語では、プロパティやメソッドに「アクセス制限」を設けることができます。外部から自由にアクセスできるパブリックなものと、外部からは利用できず、オブジェクト内でのみ使えるプライベートなもの。そうしたアクセス可能な範囲の設定ができると、ずいぶんと便利です。「これは、勝手に操作されちゃ困る」といったプロパティなどがあった場合、JavaScriptではどうすればいいのでしょう。
この答えは、意外に単純なところにあります。JavaScriptでは、オブジェクトに設定されたプロパティやメソッドは、基本的にすべて外部から利用可能です。では、利用できないようにしたい場合は? 簡単です、「プロパティやメソッドにしなければいい」のです。
JavaScriptでは、オブジェクトはコンストラクタという関数として定義されます。そして関数では、プロパティやメソッドの他に、普通の変数や関数も組み込むことができます。こうした「関数内に用意した普通の変数や関数」は、外部からは利用できません。
下のリストに、簡単な利用例をあげておきます。ここでは、MyDataObjectに用意される値のうち、nameだけを「外部から利用不可」なものにしています。またこのnameを利用するために「setName」「getName」という機能を用意していますが、これらも外部からは一切呼び出せず、内部でのみ使えるようにしてあります。
スクリプトでは、別に難しいことや新しいことなど何も使ってはいません。今までの知識で十分理解できるものですね。これで、外部から利用できないプライベートなプロパティやメソッドが作れるのです。
既に他のプログラミング言語を使ったことがあって、オブジェクト指向の考え方を知っている人が、新たにJavaScriptを学ぼうとすると、つい「他の言語で覚えたオブジェクト指向の考え方をJavaScriptに当てはめて理解しようとする」という悪い習慣に染まってしまいます。JavaScriptのオブジェクト指向は、他の言語(JavaやC#やRubyなどといったもの)とはまったく違う考え方に基づいているのです。そこのところをよく理解してください。
この答えは、意外に単純なところにあります。JavaScriptでは、オブジェクトに設定されたプロパティやメソッドは、基本的にすべて外部から利用可能です。では、利用できないようにしたい場合は? 簡単です、「プロパティやメソッドにしなければいい」のです。
JavaScriptでは、オブジェクトはコンストラクタという関数として定義されます。そして関数では、プロパティやメソッドの他に、普通の変数や関数も組み込むことができます。こうした「関数内に用意した普通の変数や関数」は、外部からは利用できません。
○サンプルスクリプト○
下のリストに、簡単な利用例をあげておきます。ここでは、MyDataObjectに用意される値のうち、nameだけを「外部から利用不可」なものにしています。またこのnameを利用するために「setName」「getName」という機能を用意していますが、これらも外部からは一切呼び出せず、内部でのみ使えるようにしてあります。
スクリプトでは、別に難しいことや新しいことなど何も使ってはいません。今までの知識で十分理解できるものですね。これで、外部から利用できないプライベートなプロパティやメソッドが作れるのです。
既に他のプログラミング言語を使ったことがあって、オブジェクト指向の考え方を知っている人が、新たにJavaScriptを学ぼうとすると、つい「他の言語で覚えたオブジェクト指向の考え方をJavaScriptに当てはめて理解しようとする」という悪い習慣に染まってしまいます。JavaScriptのオブジェクト指向は、他の言語(JavaやC#やRubyなどといったもの)とはまったく違う考え方に基づいているのです。そこのところをよく理解してください。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<script type="text/javascript"> <!-- function MyDataObject(name,age,mail){ var name = name; this.age = age; this.mail = mail; function setName(str){ name = str; } function getName(){ return name; } this.showData = function(){ var result = '名前:' + getName() + '\n'; result += '年齢:' + this.age + '歳\n'; result += 'メール:' + this.mail; alert(result); } } var obj1 = new MyDataObject('山田太郎',18,'taro@yamada'); obj1.showData(); //--> </script>
※関連コンテンツ
「初心者のためのJavaScriptプログラミング入門」に戻る