Hatena::ブログ(Diary)

oct inaodu

 | 

2006-10-20

dontEnums

jshの補完部分にある、列挙に出ないプロパティ定義部分。

Fが関数、Nが数値、Bが真偽値、Sが文字列。

ArrayにforEachがあったり、JavaScript 1.6ぐらいの内容。

jsh.Completion.dontEnums=[
  {check: function(obj, objType){return objType=='String'}, properties: {
    F:'charAt charCodeAt concat indexOf lastIndexOf match replace search slice split substr substring toLowerCase toUpperCase valueOf '+ 
      'anchor big blink bold fixed fontcolor fontsize italics link small strike sub sup',
    N:'length'
  }},
  {check: function(obj, objType){return objType=='Array'}, properties: {
    F:'concat join pop push unshift shift sort reverse slice splice toString valueOf '+
      'every filter forEach map some',
    N:'length'
  }},
  {check: function(obj, objType){return objType=='Boolean'}, properties: {
    F:'toString valueOf'
  }},
  {check: function(obj, objType){return objType=='Date'}, properties: {
    F:'getDate getYear getFullYear getHours getMilliseconds getMinutes getMonth getSeconds getTime getDay '+
      'setDate setYear setFullYear setHours setMilliseconds setMinutes setMonth setSeconds setTime '+
      'getUTCDate getUTCFullYear getUTCHours getUTCMilliseconds getUTCMinutes getUTCMonth getUTCSeconds getUTCDay '+
      'setUTCDate setUTCFullYear setUTCHours setUTCMilliseconds setUTCMinutes setUTCMonth setUTCSeconds '+
      'toGMTString toLocaleString toUTCString UTC getTimezoneOffset parse toString valueOf toSource'
  }},
  {check: function(obj, objType){return objType=='Number'}, properties: {
    F:'toExponential toFixed toPrecision toSource toString valueOf'
  }},
  {check: function(obj, objType){return objType=='RegExp'}, properties: {
    F:'exec test toSource toString',
    B:'global ignoreCase multiline',
    N:'lastIndex',
    S:'source'
  }},
  {check: function(obj, objType){return obj.navigator}, properties: {
    F:'Array String Number Date RegExp Boolean '+ 
      'escape unescape decodeURI decodeURIComponent encodeURI encodeURIComponent '+
      'eval isFinite isNaN parseFloat parseInt',
    O:'Math undefined',
    N:'Infinity NaN'
  }},
  {check: function(obj, objType){return objType=='Math'}, properties: {
    F:'abs acos asin atan atan2 ceil cos exp floor log max min pow random round sin sqrt tan',
    N:'E LN2 LN10 LOG2E LOG10E PI SQRT1_2 SQRT2'
  }},
  {check: function(obj, objType){return obj.MAX_VALUE}, properties: {
    N:'MAX_VALUE MIN_VALUE NaN NEGATIVE_INFINITY POSITIVE_INFINITY'
  }},
  {check: function(obj, objType){return obj.fromCharCode}, properties: {
    F:'fromCharCode'
  }},
  {check: function(obj, objType){return objType=='Function'}, properties: {
    F:'apply call toSource toString'
  }}
]

check関数で、ピタッとタイプ文字列がマッチするものは判定が簡単。

Numberとかwindowは、ウィンドウが違うと==で判定できなかったり、ブラウザにより挙動が違うので、雑にプロパティを見てチェックしてます。

オブジェクトリテラル、カンマの位置


shinichitomitaさんのコードのカンマの位置、

  doGet : function(path, headers, callback, errback) {
    ...
  }
  ,

  doPost : function(path, headers, data, callback, errback) {
    ...
  }
  ,
  
  ...

ここだと、切り貼りが楽だし、最後に余計なカンマが付いてIEでエラーになったりしなくっていいなぁ。


DAV、モーレツに自分も使ってみたい。

jshで書いたコードを[Ctrl]+[S]で保存したり、FlashProxyと組んでmp3を再生したり名前を補完したりしたい。

 |