変数に代入されてるもの

var symbol = "you gotta keep 'em separated.";
//symbol is <String>
/* 中略 */

symbol = {
    'name': "shinya nakano",
    'dateOfBirth': new Date(1977, 10, 10),
    'height': 167,
    'weight': 58
}
//symbol is <Object>
/* 中略 */

function func(){
    /*
    do something
    */
    
    symbol. //<- ???
}
/* 中略 */

function Person(name, birth, height, weight){
    this.name = name;
    this.dateOfBirth = birth;
    this.height = height;
    this.weight = weight;
}
Person.prototype.sleep = function(){/*...*/};

symbol = new Person("philippe larose",
                          new Date(1980, 7, 27),
                          173,
                          77);
//symbol is <Person>

さて、func 内での は String なのか Object なのか Person なのか。を特定するのに使えそうな情報は無いかと考え中。

  • 付近で symbol のプロパティを触ってて、そのプロパティはどれかにしか存在しない
  • 直前で symbol になんか代入してる
  • タイプチェックしてる
  • jsdoc みたいなの(?)

くらいだろーか。
プロパティアクセスは確認はできそうだけど、付近ってどこまで?
代入は位置関係がどこまで?
タイプチェックって typeof() か .constructor を比較するだろーけど、合ってたら処理するのか違ったら return(か throw)するのかとかめんどそう。
jsdoc みたいなのはまだよくわからん。もうちょっと調べてまとめておきたい。


どーするにしろ特定できない場合ってのが出てくるから、そーなった場合にどうするか考えておかにゃ。

  1. 無視する
  2. 「エイヤー」で1個選んでしまう
  3. 全部使う

property 名の補完は全部使ってもいいよーに思う。
property への代入は全部使ったらどーなるやら。かといって無視していいものか。「エイヤー」っつってもなぁ。
method の実行は・・・特定できないと困るな。