Archives

You are currently viewing archive for 25 May 2007
Category: Web dev
Posted by: hajime osako
プロトタイプ(prototype)によるJavaScriptのオブジェクト指向
すなわち、あるオブジェクトがプロパティを評価された時、自分自身がそのプロパティを持っていなければ、暗黙の参照をたどって、その先のオブジェクトのプロパティを評価します。
参照がJavascriptは変。
最初、インスタンスは暗黙で参照になるのに、できたインスタンスの値を変更すると、参照にならない。

サンプル:
// Constructor (何もできない?)
var Validator = new Function();

// Declare Properties
Validator.prototype.regExpPatterns = new Object(); // *1
Validator.prototype.errMsgs = new Object();

// Declare Methods
Validator.prototype.validate = function(elm, ptn, msg)
{
   var _parent = new Validator(); // *2
   var _str = null;

   if(!ptn && elm.name && _parent.regExpPatterns[elm.name])
   {
      ptn = _parent.regExpPatterns[elm.name];
   }
   
   ...
}

Validator.prototype.setAlertErr = function(bool)
{
   Validator.prototype.alertErr = bool;   //*3
}

Validator.prototype.getAlertErr = function()  // getterは意味がない?
{
   var _parent = new Validator();  //*2
   return _parent.alertErr;
}

//*** How to use ***
var myValidator = new Validator(); // インスタンスを作成
myValidator.regExpPatterns["account_id"] = "[0-9]";   //プロパティを変更
myValidator.setAlertErr(false);   //セッターを使用
*1: プロパティやメソッドを追加するのに、prototypeを直接使うのはECMAScriptに準拠しない、がIEやFirefoxでは動く。ネームスペースを考えると、このやり方のほうがベターに思う。
*2: メソッド内で、親クラスなどのメソッドを使いたいときはインスタンスを作成しないとうまく動かない。
*3: しかし、メソッドからプロパティを変更するときはprototype。
Category: Web dev
Posted by: hajime osako
Selenium IDE: Selenium IDE
Firefoxのプラグイン(extension)として動きます。