• 締切済み

クロージャ

javascriptのクロージャについて。 クロージャにnewは必要ですか? コンストラクタであれば、newでオブジェクトを生成しますが、クロージャはどうでしょうか? クロージャ-------------------- function Person(n, a){ var name = n; var age = a; return { getName: function() { return name; }, setAge: function(i){ if( 0<= i ){ age = i; } }, getAge: function(){ return age; } } } var p = new Person('Hanako', 3); // new を付けなくても生成できる

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

クロージャの意味を理解されていないのでは? クロージャはオブジェクトを生成しません。

関連するQ&A

  • thisとvar ?

    javascript初心者です。 コンストラクタ(プロトタイプ)とクロージャを学んでいますが、 コンストラクタ(プロトタイプ)では、関数内にthisで変数宣言、クロージャはvarで宣言しています。 この違いの理由は何でしょうか?漠然とした質問ですみません。 thisとvarでの変数宣言の違いなど教えていただけないでしょうか? コンストラクタ-------------------- function Person(n){ this.name = n; } Person.prototype.city = 'Tokyo'; Person.prototype.moveTo = function(c){ document.write(this.name + ': Moving to... ' + c + '<br>'); Person.prototype.city = c; } クロージャ------------------- function Person(n, a){ var name = n; var age = a; return { getName: function() { return name; }, setAge: function(i){ if( 0<= i ){ age = i; } }, getAge: function(){ return age; } } }

  • phpのプログラム

    php初心者です。 以下がうまく実行できません。 どなたかご教授お願いします。 <html> <body> <?php $pr1 = new Person; $pr2 = new Person; ?> <table border = "2"> <tr bgcolor = aqua> <th>名前</th> <th>年齢</th> </tr> <?php $pr1->setname("佐藤"); $pr1->setage(34); $pr2->setname("田中"); $pr2->setage(45); print"<tr><td>"; print $pr1->getname(); print "</td><td>"; print $pr1->getage(); print"</td></tr>" print"<tr><td>"; print $pr2->getname(); print "</td><td>"; print $pr2->getage(); print"</td></tr>" ?> </table> <?php class Person{ private $name = "姓名"; private $age = 20; public function setname($nm) { $this->name = $nm; } public function setage($ag) { $this->age = $ag; } public function getname(){return $this->name;} public function getage(){return $this->age;} } ?> </body> </html> よろしくお願いします。

    • 締切済み
    • PHP
  • php クラス

    phpエクラスの勉強をしているのですが、参考書に書いているメンバ変数に値を代入している意味がよくわからないので教えてください。メンバ変数の値を書かなくtも動作できるのになぜ必要なのでしょうか? 参考書 <html> <head> <title>サンプル</title> </head> <body> <?php $pr = new Person; $pr->name = "鈴木"; $pr->age = 56; ?> <table border="2"> <tr bgcolor="#AAAAAA"> <th>名前</th> <th>年齢</th> </tr> <?php print "<tr><td>"; print $pr->getname(); print "</td><td>"; print $pr->getage(); print "</td></tr>"; ?> </table> <?php class Person { public $name ="姓名"; public $age = 20; function getname(){return $this->name;} function getage(){return $this->age;} } ?> </body> </html> テスト <?php class Person { public $name ;←ここに値を格納する意味 public $age ;←ここに値を格納する意味 function getname(){return $this->name;} function getage(){return $this->age;} } ?>

    • ベストアンサー
    • PHP
  • php クラス

    クラスの勉強をしているのですが、 記憶寿命をfunctionの中で完結させsample2以降でも同じ変数などを使えるようにするため定義済み関数内でクラスを処理したいのですが下記のエラーが出てしまいます。 functionの中でクラスを簡潔させるにはどのようにすればよいでしょうか?また、これはなぜエラーが起きているのでしょうか? function sample1(){ $pr=new parson; $pr->name="鈴木"; $pr->age=56; print $pr->getname(); print $pr->getage(); class parson { public $name="鈴木"; public $age=56; function getname(){return $this->name;} function getage(){return $this->age;} }} sample1(); Fatal error: Uncaught Error: Class 'parson' not found in hoge/class.php:11 Stack trace: #0 /hoge/class.php(27): sample1() #1 {main} thrown in /hoge/class.php on line 11

    • ベストアンサー
    • PHP
  • PHPコード読解教えてください

    PHP初心者で、現在独学で学んでいます。 環境:XAMPP1.70(最新)でアパッチなど一括ダウンロード・OSはビスタ 以下のコードで分からない点がありますので教えてください(細かい部分は省略しています) また、●の部分は、疑問点や私の考えを示しています。間違っていましたら逐次ご訂正お願いいたします。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <?php $pr1=new person("鈴木",56) $pr2=new person("佐藤",38) ●コンストラクタを使用するためこの表記 ?> <table border="2"> <tr> <th>名前</th> <th>年齢</th> </tr> <?php print "<tr><td>" print $pr1->getname() print "</td><td>" print $pr1->getage() print "</td></tr>" print "<tr><td>" print $pr2->getname() print "</td><td>" print $pr2->getage() print "</td></tr>" ?> </table> <?php print <hr/> print "合計人数" print person::$count  ?> <?php class person{ private name="姓名" ●● private age= 20  ●●● public static $count=0 ●●●● public function__construct($nm,$ag) ●●●●● { person::$count++  $this->name=$nm if($ag>=20 && $ag<=60) $this->age=$ag   ▲ } else{ $this->age=-1  } public function agtname(){return $this->name}  public function getage(){return $this->age} } ?> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ●●および●●●・・>この部分のコードの存在意義が分かりません。 ●●●●・・>クラス全体に関連付ける"static"ですが、いまいちよくわかりません。クラス全体に関連付けるとはすなわち分かりやすく言うとどういう意味でしょうか? ●●●●●・・>コンストラクタについてですが、全てのオブジェクトを処理するまで繰り返される、つまり"for"、"while"みたいなものとの理解でよろしいでしょうか?もうしそうであるなら変数$pr1の処理が終わった後、$pr2の処理をするため、▲のところで"$count++"まで戻り、再び下へ処理していくとの理解でよろしいでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • javascriptのクロージャが理解できずに苦しんでいます。

    javascriptのクロージャが理解できずに苦しんでいます。 下記のようなコードをよく見るのですが、a()とfuncA()()が等価のようなのですが 実行するとa()の場合のみ変数の値が維持されます。 a()とfuncA()()の違いを理解したいと思っています。 どなたかどうぞよろしくお願い致します。 またクロージャのわかりやすい解説サイトなどご存知の方いらっしゃいましたら 合わせてよろしくお願い致します。 function funcA() { var i = 10; return function() { i++; alert(i); }; }; var a = funcA(); console.log(a() === funcA()())//true funcA()();//11 funcA()();//11 funcA()();//11 a();//11 a();//12 a();//13

  • デストラクタについて

    #include <iostream> #include <string> using namespace std; #define NUM 2 //登録人数 class Person{ char *name; int *age; char *hobby; public: Person() { name = new char; age = new int; hobby= new char; } void Set(char *n,int a,char *h) { name=n; *age=a; hobby=h; } char *Get_name(void) { return name; } int Get_age(void) { return *age; } char *Get_hobby(void) { return hobby; } ~Person() { cout<<name<<"のデストラクタ\n"; delete [] name; delete age; delete [] hobby; } }; int main(void) { Person *p; int i; p=new Person[NUM]; p[0].Set("永嶋",21,"映画鑑賞"); p[1].Set("平林",54,"車"); for(i=0;i<NUM;i++){ cout<<"\n名前:"<<p[i].Get_name(); cout<<"\n年齢:"<<p[i].Get_age(); cout<<"\n趣味:"<<p[i].Get_hobby()<<"\n"; } delete [] p; return 0; } というプログラムを作成したのですが デストラクタの3つのdeleteがおかしいようなのですが どのような部分が問題となっているのでしょうか? 回答・アドバイス宜しくお願いいたします。

  • Javascriptの書き方

    素朴な質問なんですが、 JavaScriptを書くとき、全部左寄せにそろえて 良いのでしょうか? 下のように、段差があったほうがいいのでしょうか? function toStringOfPerson() { return (this.name + " / " + this.age); } function Person(name, age) { this.name = name; this.age = age; this.toString = toStringOfPerson; } ホームページを作成中、 半角スペースが2つ、3つ重なったところを 一括変換していて、疑問がわきました。

  • 例外処理(throws Exception)について

    Javaでインスタンスを作るときの例外処理を学んでいます。 ageクラス(属性は、private int ageのみ)のt1オブジェクトを作るときに、年齢が0歳以上100歳以下ならt1が作られ、それ以外の場合はエラーを返すようにしたいと思いますが、うまくいきません。 そのため、仮に50歳でオブジェクトを作ってから、年齢を150にした場合を考えましたが、Sample クラスのt1.setAge(150);のところで、「処理されない例外の形」というエラーが返っております。 改善点につきまして、ご教示いただければ幸いです。 ■■ageクラス■■ package ex1; public class age { //***属性***// private int age; //***コンストラクタ***// public age(int data){ this.age= data; } //**メソッド**// public int getAge(){ return age; } public void setAge(int age)throws Exception{ //**年齢が0から100までかどうか**/ if((age > 0) && (age <100)){ this.age = age; } else{ throw new Exception("無効です"); } } } ■■Sample クラス■■ package ex1; public class Sample { public static void main(String[] args) { age t1; t1 = new age(50); t1.setAge(150); System.out.println("t1_age="+ t1.getAge()); } }

  • エラーメッセージ(初歩)

    こんにちは。早速ですが質問させていただきます。 javaの課題をやっているのですが、どうしてもエラーメッセージ を解決できません。 まずプログラムですが… class Dog1{ private String name; private int age; public Dog1(String n){ name = n; } public Dog1(int a){ age = a; } public void getName(){ System.out.print(name); } public void getAge(){ System.out.print(age); } } class Ex45{ public static void main(String args[]){ Dog1 d = new Dog1(); d.setName("ケイ"); d.setAge(17); System.out.println(d.getName() + "は" + d.getAge() + "才の犬です。"); } } このようなプログラムなのですが、 学校から出された課題なのでいくつか条件があります。 1.main文はそのまま使用する(main文は課題プリントを丸写しの状態です。) 2.Dog1クラスを作成し、Dogクラスの変数はprivate変数とする 以上です。 このような条件でプログラムを考えては見たもののバグが出てしまい 一向に問題が解決しません。 バグの箇所はmain文のd.getName()あたり(void型は使用できない)とのメッセージです。 どなたかよろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう