parseとtoStringの違い

このQ&Aのポイント
  • javascriptでparseとtoStringの違いについて学んでいます。
  • parseの部分をtoStringにすると、データの型が変わるのでしょうか?
  • parseとtoStringの違いについて教えてください。
回答を見る
  • ベストアンサー

parseとtoStringの違い

javascriptを勉強中です。 基本的な事かもしれませんが識者の方、宜しくお願いします。 以下のようなスクリプトで parseの部分をtoStringにすることで何が違ってくるのでしょうか? データの型?が違うのでしょうか? 御存じの方がいましたらご教授下さい。 function totest(str){ this.str = "abcdefg"; this.str += str; return this.str; } function test1(str){ this.str = str; this.parse = totest } var str = "aaa”; var p1 = new test1(str); alert(p1.str); alert(p1.parse(str));

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

  • ベストアンサー
  • ANASTASIAK
  • ベストアンサー率19% (658/3306)
回答No.1

this.toString=totest とすることによって、test1クラスのインスタンスからtotest()を呼ぶことができます。 ただし、上記の場合は引数が先行しますので、strはundefinedとなると思います。 これを避けるためには、 function totest(){ this.str = 'abcdefg'; this.str += str; return this.str; } として、定義されているstrのグローバル変数を参照するようにすることですが、 この場合は、parseプロパティによって関数を実行した場合とは格納順序が逆になり ます。つまり、「abcdefgaaa」となるはずです。

enta_2006
質問者

お礼

なるほどtoStringの場合はtotest()に引数を渡せないので、グローバル変数を使った方がいいということですね。 parseを使うとp1.parse(str)でtest1(str)に引数を渡せるということですね。 ハッキリして助かりました。ありがとうございました!!!

関連するQ&A

  • 文字列と配列の振る舞いの違いについて

    以下のコードで出るalertが Array => 12 String => 2 となります。この原因といいますか原理をご存じでしたら教えていただけませんでしょうか。お願いします。 =========================================================== var test = function(name){ this.arr.push(name); this.str += name; } test.prototype = { arr:[], str:"" } var r = new test("1"); var z = new test("2"); alert("Array => " + z.arr.join("") + "\nString => " + z.str);

  • javascriptのカプセル化について

    ただいま、javascriptの勉強をしている初学者であります。 テストプログラムを作ってみたのですが、思うように動作せず、理由が分からなくて悩んでいます。 オブジェクト指向のように、パブリックとプライベートの関数をそれぞれ作り、動作させようとしたのですが、method1()、method2()は続けて呼び出せるのですが、method3()を呼び出すことなく、プログラムが終了してしまいます。 ご指南よろしくお願いします。 var test1 = function(){ this.method1 = function(){ alert("method1"); method2(); }; var method2 = function(){ alert("method2"); this.method3();//呼ばれない? }; this.method3 = function(){ alert("method3"); }; };

  • newでコンストラクタ関数が受け取った引数の行き先

    ・Test1とTest2で何が違うのでしょうか? ・Test1のtenは、this.scoreで生成するインスタンスプロパティへ格納 ・Test2のtenは、どうなっているのでしょうか? ・どこへも格納していないのに、「new Test2('100');」で文が終わった後、呼び出せている理由は? ■Test1 var Test1 = function (ten) {  this.score = ten;  this.getScore = function() {   alert(this.score);  } } var result1 = new Test1('100'); result1.getScore(); ■Test2 var Test2 = function (ten) {  this.getScore = function() {   alert(ten);  } } var result2 = new Test2('100'); result2.getScore(); ■下記★部分の「alert(this.score);」「alert(ten);」何れも100と表示されるのですが、中でどういう処理が走ってそういう結果になるのでしょうか? var Test3 = function (ten) {  this.score = ten;  this.getScore = function() { //★  alert(this.score);   alert(ten); } } var test3 = new Test3('100'); test3.getScore();

  • JavaScriptのグローバル変数

    JavaScriptのグローバル変数 次のプログラムで、(1)は p.obj1 = 32 と表示されるのに、 (2)はエラーになります。pはグローバル変数的にアクセスできる のに、なぜobj1がアクセスできないのかが分かりません。 詳しい方の解説をお願いします。 // test.js main(); function main() { F2(new F1(32, 100)); alert("p.obj1 = "+ p.obj1); // (1) alert("obj1 = "+ obj1); // (2) } function F1(obj1, obj2) { this.obj1 = obj1; this.obj2 = obj2; } function F2(p) { this.p =p; return this.p; } function alert(message) { WScript.Echo(message) }

  • javascriptのレキシカルスコープについて

    JSのレキシカルスコープがわかりません。 JSだと、一番外側のスコープで var str = "一番外側のスコープ"; とすると それ以降、ユーザー定義関数の中の、いわゆる関数スコープ内でも var str; と関数内で再定義しない限り、str = "一番外側のスコープ";を つかいまわすことになりますよね? 一度、関数内で、値を変更すると親スコープでもその変更が生きたままになると思います。 var str ="一番外側のスコープ"; function test(){ alert(str); str ="値の変更"; } alert(str) // 関数内で値をかえたけど、それが親スコープにも反映されてしまう。 このことがレキシカルスコープでしょうか? ただ、どこかのサイトで var num = 100; function makefunc() { return function() { alert(num); } } function callfunc() { var num = 50; var func = makefunc(); func(); }; callfunc(); でmakefunc()関数を呼び出した際の 関数内のnumという変数の値が100になるというのです。 実際、実行するとその通りなのですが、 var num = 50; という宣言は、callfunc() という関数の関数スコープ(ローカルスコープ) というのは理解しています。 でその中のいわゆる内部関数というのでしょうか? var func = makefunc(); func(); を実行した際の 変数numというスコープが 一番最初に宣言した  var num = 100; という値をさすというのです。(※そのサイトではこれをレキシカルスコープと呼んでいました) いったどういう動作がレキシカルスコープなのでしょうか? 他にも、クロージャともごっちゃになっております。 識者の方ご教授ください。 参考元はここです http://garden-place.jp/tech/javascript/scope-chain.html

  • JS 親functionのフィールドを参照したい

    ボタンをクリックすると、任意の文字がalertで表示されるHTMLを生成するプログラムをJavaScriptで(JQueryを使用しています)書いています。 イメージは、 <button onclick='alert(任意の文字列)'>CLICK ME!</button> のようなHTMLです。 JavaScript部分は以下です。 var ButtonMaker = function(msg){    this.msg = msg; } ButtonMaker.prototype = {    getButton: function(){       var button = $('<button>').text('CLICK ME!');       button.click(this.eventMaker());       return button;    },        eventMaker: function(){       var that = this; // ←これをしたくありません       return function(){          alert(that.msg);       }    } } // 以下のようにして使います var bmaker = new ButtonMaker('This is a message.'); $(document.body).append(bmaker.getButton()); 上記のコードを実行すれば、自分の思い通りの動きになります。ですが、eventMaker()メソッドが気に入りません。var that = thisをしたあと、that.msgなどとして参照しないといけないのが嫌です。 また、以下のコードのようにeventMaker()にmsgを引数に渡すのもあまりしたくありません。なぜなら、実際はButtonMakerのフィールドがもっとたくさんあり、それらのいくつかを参照するからです。 eventMaker2: function(msg){   return function(){     alert(msg);   } } よろしくお願いします

  • オブジェクト指向で書いた時のフォーム値受取り

    オブジェクト指向で記述したときの、フォームの値の受取の記述方法 がわかりません。 例えば下記のようなフォームがあったとすると ---------------------- <form name="test"> <input type="text" name="name"> <input type="button" value="送信" onClick="testAlert()"> </form> ---------------------- 手続き型では ============================= function testAlert(){  var name = document.test.name.value;  alert(name); } ============================= こんな感じで値を受取りアラート出力できますが、 オブジェクト指向で記述した場合はどうなりますか? ============================= var aaa = function(name){  this.name = name; }; aaa.prototype.test = function(){  return alert(name); }; ============================= こういうような感じだとは思うのですが、ここから先が分かりません。 よろしくお願いします。

  • 引数の違うメソッド

    PHPで同名で引数の違うメソッドを作成したいのですが、可能でしょうか? <?php class Test { var $test_str = ""; function set($str){ $test_str = $str; //$this->$test_str = $str; // どちらでも良い? } function Test() { // 引数なし } function Test($str) { // 引数あり $this->set($str); } } $obj = new Test(); ?>

    • ベストアンサー
    • PHP
  • HTML内の特定のクラスの中身の返り値について

    Javascriptの質問です。 HTML内の特定のクラス名の中身を変数に入れて別のところで使用したいと考えています。 下記のようなコードでアラートに中身が入っていることは確認できました。 これをどのように返り値として取得すればよいか教えていただきたいです。 下記のreturnの書き方では関数の外では値がとれていませんでした。 すみませんが、よろしくお願いします。 window.onload = function (){ (function(){ var elms = document.getElementsByClassName("クラス名"); aaa = elms[0].innerHTML; })(); alert(aaa); return aaa; }

  • PHPでParse errorについて

    PHPでParse errorについて PHP設置した際に Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /当HPのアドレス/VoteBorn/VoteController.php on line 9 が表示されているのですが 9行目付近を見直しても間違えがわかりません。 <?php //VoteControllerから見たMatrixController.phpへの相対パス require_once "./MatrixController.php"; //Version 1.00 //Made by Nearliquid class VoteController extends MatrixController { private $col_list = array("id", "name", "Vote"); private $target_row = NULL;//ターゲットの行 private $target_vote = NULL;//ターゲットの投票数 private $now_row; public function makeFile($vote_file) { $this->makeMatrix($vote_file, $this->col_list); } //この関数を使わないと、これより下の関数は使用できない。 public function readFile($fp) { $this->readMatrix($fp); } public function checkNameCrash($name) { if($this->getTargetRow("name", $name) === FALSE) {//登録予定の名前は現在投票システム上には存在しない return(TRUE); } else {//二重登録 return(FALSE); } } 以下略・・・・ 申し訳ないのですが 是非ご教示の程よろしくお願いします

    • ベストアンサー
    • PHP

専門家に質問してみよう