• ベストアンサー

initialize.apply(this,arg

function Class() {   this.initialize.apply(this,arguments); } の「this.initialize.apply(this,arguments);」部分が分かりません。 どういう意味でしょうか? >インスタンス生成時に必ず呼ばれるように、apply() らしいのですが、なんでそうなるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • gorusura
  • ベストアンサー率59% (25/42)
回答No.1

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/apply apply というのは、apply(thisArg, argsArray) のように渡します。 this.initialize.call(this,arguments[0],arguments[1], ...... , arguments[ arguments.length - 1 ]); これと同じですね。(これはエラーですが。)

re97
質問者

お礼

回答ありがとうございました。 大変参考になりましたー

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • トリッキーなJSの文法(prototype.jsなど)が分かりません

    Ajaxの「prototype」( http://www.prototypejs.org/ )などで 下記のようなfunctionの記述方法をよく見かけます。 ▼Prototype.js(ver1.5.0) 20行目抜粋 ---------------------------------------- var Class = {  create: function() {   return function() {    this.initialize.apply(this, arguments);   }  } } -------------------------------------------- でも、私には高度すぎて以下の点がどうしても読み解けません。  (1)var Class = {~~~~~~} が、何をしているのか分かりません。    配列なら[ ]ですし関数か何かを省略した宣言の記述方法なのでしょうか?  (2)create: が何なのか分かりません。必死で調べたら型を宣言しているような感じでしたが、    見慣れない「:」を使ったプログラムで検討もつきません。 私が知っているfunction宣言はこの2パターンのみしか知りません。 ・一般的なfunction宣言  function test(hikisu){   //処理内容  } ・無名関数でのfunction宣言  var a = function(x) {   //処理内容  } ぜひ教えていただけませんでしょうか。 どうぞよろしくお願いします。

  • (クラス名.this.メソッド)って・・・?

    次のようなクラスで public class ClassA {   public static void main(String[]args)   {     new ClassA(); /* 構築A */   }   public ClassA()   {     new ClassI();   }   public class ClassI()   {     ClassA.this.MethodA(); /* 命令A */   }   public void MethodA()   {     System.out.println("HELLO");   } } この命令Aの部分の (クラス名.this.メソッド)というアクセス方法がよくわかりません とりあえす(ClassA.this)が構築Aの部分で生成された インスタンスではないかとおもうのですがそれで正しいのでしょうか? また インナークラスはインナークラスの定義されているクラス以外から インスタンスを生成できないのでしょうか? つまり次のクラスを追加して public class ClassB {   public ClassB()   {     new ClassA.ClassI(); /* 構築B */   } } ここの構築Bのように(この場合はダメの様ですが)他のクラスから 構築することです もし仮にできるとしたら そのときの命令Aの(ClassA.this)は一体なんの インスタンスを指すのでしょうか 急ぎのプログラムを作っているので たいへん不躾ですが、なるべく早くお答えをお願いします

    • ベストアンサー
    • Java
  • オブジェクト指向の上手い使い方を教えてください

    以下のような、クラスにまとめた処理を一度実行してるファイルがあります。 <?php class Hoge {  public function __construct() {   // 設定値   $this->a = 1;   $this->b = 2;   $this->c = 3;  }  public function main() {   // 設定値を使った処理   print $this->a + $this->b + $this->c;   } } // インスタンス生成・実行 $hoge = new Hoge(); $hoge->main(); ?> 設定値を変更して2回処理を行いたい場合、 一番スマートな形はどれになるか教えてください。 もしくは、それ以外の方法など。 1.設定値を引数で制御し、インスタンスを2回生成する (※設定値自体を引数に渡すことは考えてないです) <?php class Hoge {  public function __construct($flg) {   // 設定値   if ( $flg ) {    $this->a = 1;    $this->b = 2;    $this->c = 3;   } else {    $this->a = 4;    $this->b = 5;    $this->c = 6;   } }  public function main() {   // 設定値を使った処理   print $this->a + $this->b + $this->c;  } } // インスタンス生成・実行 $hoge = new Hoge(true); $hoge->main(); // インスタンス生成・実行 $hoge = new Hoge(false); $hoge->main(); ?> 2.インスタンスの生成・実行は1度のままにし、クラスの処理を変更する <?php class Hoge {  public function __construct() {   // 設定値   $this->a = 1;   $this->b = 2;   $this->c = 3;   $this->a2 = 4;   $this->b2 = 5;   $this->c2 = 6;  }  public function main() {   // 設定値を使った処理   print $this->a + $this->b + $this->c;   // 設定値の変更   $this->a = $this->a2;   $this->b = $this->b2;   $this->c = $this->c2;   // 設定値を使った処理2回目   print $this->a + $this->b + $this->c;   } } // インスタンス生成・実行 $hoge = new Hoge(); $hoge->main(); ?> 3.設定値を変更するメソッドを作り、呼び出す <?php class Hoge {  public function __construct() {   // 設定値   $this->a = 1;   $this->b = 2;   $this->c = 3;  }  public function change() {   // 設定値変更   $this->a = 4;   $this->b = 5;   $this->c = 6;  }  public function main() {   // 設定値を使った処理   print $this->a + $this->b + $this->c;   } } // インスタンス生成・実行 $hoge = new Hoge(); $hoge->main(); $hoge->change(); $hoge->main(); ?> 4.子クラスを作り、2回インスタンス生成・実行を行う <?php class Hoge {  public function __construct() {   // 設定値   $this->a = 1;   $this->b = 2;   $this->c = 3;  }  public function main() {   // 設定値を使った処理   print $this->a + $this->b + $this->c;   } } class Hoge2 extends Hoge{  public function __construct() {   parent::__construct();   // 設定値   $this->a = 4;   $this->b = 5;   $this->c = 6;  } } // インスタンス生成・実行 $hoge = new Hoge(); $hoge->main(); // インスタンス生成・実行 $hoge = new Hoge2(); $hoge->main(); ?> 5.設定値だけ異なるファイルを作りそれぞれ実行する ※省略 よろしくお願いします。m(__)m

    • 締切済み
    • PHP
  • jQueryのthisの使い方

    javascript初心者なので根本的に勘違いしていたらすいません。 jQueryを使ってAAというclass領域をポイントしたら同じAAのclassを設定されているすべてのCSSをかきかえる、ということをしたいです。 $(document).ready(function(){ $(".AA").hover( function () { $(this).css('color', '#000000'); }, function(){ $(this).css('color', '#222222'); } ); }); ここまでは書いたのですが、ポイントしているところだけしか変わらないので、ページ内のすべての同じクラスに結果が反映されるようにしたいのですが書き方がそもそも間違ってるんでしょうか…。

  • 以下のサンプルでのthisが指すものについて・・・

    package ya.Sample; import android.app.*; import android.os.*; import android.widget.*; public class Sample2 extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout ll = new LinearLayout(this); setContentView(ll); TextView tv = new TextView(this); tv.setText("ようこそアンドロイドへ!"); ll.addView(tv); } } このサンプルにおいてLinearLayout ll = new LinearLayout(this)のthisの指すものについて質問があります。私がこのthisはSample2を指すんですよねと質問したところ 引数thisは Sample2 を指しますよね 大雑把な理解だなぁ。 Sample2は「型」なのだから、例えば「整数」や「文字列」のような概念だ。 thisは特定のインスタンスを指すのだから、1024とか"abc"とか、そのクラスに属するもののうち、特定の具象を指すものだ。 27や47が整数である、というのと同じ意味で、thisはSample2ではあるのだが、こういう場合は普通「thisはSample2のインスタンスである」と表現する とある方に回答をいただいたのですが 「thisはSample2のインスタンスである」と表現する の部分のインスタンスが理解できません・・・ インスタンスとはClassから製造されたObjectであるはずですからこの場合 Sample2クラスを雛型として作られたObjectをThisは指すとかってに再解釈してしまい、 この引数Thisはオブジェクトのことでありnew LinearLayout(this)において、LinearLayoutは引数にオブジェクトを持っているということでしょうか?そして継承関係よりこのオブジェクトはContextクラス(?)も含んでいるため、LinearLayoutクラスのLinearLayout(Context context)は呼び出しに成功するということなのでしょうか? 今までJavaの引数で見てきたのが実数や文字だったので、引数がオブジェクト(?)なのにちょっと違和感がありまして・・・ 回答していただけたらうれしいですよろしくお願いいたします!!!

    • ベストアンサー
    • Java
  • javascriptカウントダウン終了後別ページへ

    javascriptでカウントダウン終了後に別ページに飛ばすリンクを表示したいのですが、どのようにすれば教えていただけますでしょうか? 下記スクリプトではカウントダウン終了時に「終了しました」と表示されます。 その「終了しました」にリンクを貼りたいです。 <script language="JavaScript" type="text/javascript"> function CountdownTimer(elm,tl,mes){ this.initialize.apply(this,arguments); } CountdownTimer.prototype={ initialize:function(elm,tl,mes) { this.elem = document.getElementById(elm); this.tl = tl; this.mes = mes; },countDown:function(){ var timer=''; var today=new Date(); var day=Math.floor((this.tl-today)/(24*60*60*1000)); var hour=Math.floor(((this.tl-today)%(24*60*60*1000))/(60*60*1000)); var min=Math.floor(((this.tl-today)%(24*60*60*1000))/(60*1000))%60; var sec=Math.floor(((this.tl-today)%(24*60*60*1000))/1000)%60%60; var milli=Math.floor(((this.tl-today)%(24*60*60*1000))/10)%100; var me=this; if( ( this.tl - today ) > 0 ){ if (day) timer += '<span class="day">'+day+':</span>'; if (hour) timer += '<span class="hour">'+hour+':</span>'; timer += '<span class="min">'+this.addZero(min)+':</span><span class="sec">'+this.addZero(sec)+':</span><span class="milli">'+this.addZero(milli)+'</span>'; this.elem.innerHTML = timer; tid = setTimeout( function(){me.countDown();},10 ); }else{ this.elem.innerHTML = this.mes; return; } },addZero:function(num){ return ('0'+num).slice(-2); } } function CDT(){ var tl = new Date('2013/2/1 00:00:00'); var timer = new CountdownTimer('CDT',tl,'終了しました'); timer.countDown(); } window.onload=function(){ CDT(); } </script>

  • phpのthis

    a.phpを作成しました。 thisによるアクセスが可能かと思ったのですが、やはりできないのでしょうか。 ===a.php==== <?php $val = 1 ; method(); function method(){ echo $val; echo $this -> val; } ?> ===a.phpここまで===== 別のphpファイル(try.php)には以下内容を記述しました。 ===try.php=== <?php class User { private $id; public function get_id(){ return $this->id;} } public function set_id($id){ $this->id=$id; } ?> 質問: なぜ、 「try.phpでは、$idにthisでアクセスできるのでしょうか? (returnの違いかと思いましたが、set関数はreturnがないのでretrunでもないと思っています。) a.phpでは、thisで valにアクセスできないのでしょうか?」 try.phpは、classを付けてクラス作成しているから、$idにthisでアクセスできるのでしょうか? ご教授お願いします。

    • ベストアンサー
    • PHP
  • メソッドの引数としてのthisの意味

    java初心者です。教えてください。 メソッドの引数としてのthisは何を表しているのですか? いろいろ調べてみてthisには以下の2つの使用法があることがわかりました。 1.インスタンス変数の名前とインスタンスメソッド内のローカル変数名がかぶったときに、メソッド内でインスタンス変数を表すときにthis.変数名とする。 2.あるクラスのコンストラクタ内で、同じクラスの別のコンストラクタを呼ぶときに使う。 しかし、引数としてのthisの意味がわかりません。 具体的には、addMouseListener(this);や、g.drawImage(img,10,10,this);のthisです。 後者の場合はオブジェクトgのインスタンスメソッドなので、thisはオブジェクトgへの参照を表しているのでしょうか?

    • ベストアンサー
    • Java
  • プログラミングrubyでの質問

    今、複合データ型のデータの集まりを作ってるんですが。 まあ、classをつくってその中に様々なデータを作っています。 えとわからないことがありまして、 classのインスタンスと属性、または属性値の違いってなんですか? インスタンス変数ってのは属性値のことですか? あとinitializeメソッドでインスタンス変数を初期化する意味はなんですか? 初期化するとどうなるんですか? 入門書を読んで独学で学習中なのですが、言葉の意味の例えが無くて 理解するのに頭が混乱してきました。助けてください。

    • ベストアンサー
    • Ruby
  • javascriptのconstructorプロパティについて

    constructorプロパティとは、 オブジェクトの初期化で使用されたコンストラクタ関数を参照 とのことなので、下記2パターンのPGを作成しました 1.prototypeの明記なし function Hoge(){ this.init = "Hogeで初期化"; this.getInit = function(){ return this.init; } } var obj = new Hoge(); alert(obj.constructor == Hoge); for(prop in obj){ alert( prop + " - " + obj[prop]); } //実行結果 True init - Hogeで初期化 getInit - function () { return this.init; } 2.prototypeの明記あり function Hoge(){ this.initialize.apply(this,arguments); this.init = "Hogeで初期化"; this.getInit = function(){ return this.init; } } Hoge.prototype ={ initialize:function(){ this.init = "Hoge.prototype.initializeで初期化"; }, getInit:function(){ return "Hoge.prototype.getInit()"; } } var obj = new Hoge(); alert(obj.constructor == Hoge); for(prop in obj){ alert( prop + " - " + obj[prop]); } //実行結果 false init - Hogeで初期化 getInit - function () { return this.init; } initialize - function () { this.init = "Hoge.prototype.initialize\u3067\u521D\u671F\u5316"; } ・質問内容 prototypeの明記なしの場合は、Hogeのコンストラ関数を参照している(結果がTrueのため) prototypeの明記ありの場合は、falseのためコンストラ関数を参照していないのですが、 prototype明記あり、なしで結果が異なる理由が分からない状態です。 (prototype.constructorにも手を出したのですが、上記が解決しないため  constructorプロパティに関してのみ質問した次第です) ネット、書籍等で調べたのですが、検討がつかない状態です。 お手数ですが、ご教授お願い致します。