2012-01-27 6 views
1

いくつかのHTML要素のラッパークラスの作成に取り組んでいますが、.appendChildが呼び出されたときにクラスのデフォルト動作を指定する方法があるかどうかを知りたいと思いますその上に。オブジェクトのappendchildが呼び出されたときのデフォルトの動作を作成します。

// Very simple textbox wrapper class 
function MyWrapperClass(){ 
    this.input = document.createElement('input'); // textbox 
} 
MyWrapperClass.prototype.setValue = function(v){ 
    this.input.value = v; 
} 

// Add instance of my wrapper class to DOM 
var foo = new MyWrapperClass(); 
document.body.appendChild(foo.input); // Works fine. 

これで十分です。しかし、私はこれを取得するのに十分な抽象私のコードにしようとしている:のappendChildは、FOOに呼び出されたときfoo.inputが自動的に返され

// Add instance of my wrapper class to DOM 
var foo = new MyWrapperClass(); 
document.body.appendChild(foo); 

さて、私はそれで入力要素が機能を構築していますが、私はそれを行うとき、私はクラスのメソッドを呼び出すための能力を失う返すために私のラッパークラスを変更することができることを実現:

// Modified wrapper, returns input on instancing 
function MyWrapperClass(){ 
    this.input = document.createElement('input'); // textbox 
    return this.input 
} 

var foo = new MyWrapperClass(); 
foo.setValue('Hello'); // ERROR: html input element has no setValue method 

では、オブジェクトのデフォルトの動作をオーバーライドし、.appendChildがfooで呼び出されたときにfoo.inputを返す方法はありますか?

答えて

1

あなたはこのフィドル見document.body.appendChild(foo);

function MyWrapperClass(){ 
    this.input = document.createElement('input'); // textbox 
    return this; 
} 
MyWrapperClass.prototype.setValue = function(v){ 
    this.input.value = v; 
} 
MyWrapperClass.prototype.append = function(){ 
    document.body.appendChild(this.input) 
} 


var foo = new MyWrapperClass(); 
foo.setValue('test'); 
foo.append(); 

を行うよりも抽象以上のことができるようになり、あなたのオブジェクトのメソッドappend()作成する場合:http://jsfiddle.net/yJ44E/
注:あなたも受け入れるようにそうappend()方法を変更することができますが要素を追加する引数としてnodeを指定します。

+0

Ah!いい案!/*額のスラップ*/ クラスのappendTo(要素)メソッドを書くことができます。それは私が元々持っていたものよりずっときれいです。ありがとう!!! –

+0

はい。単一のメソッドappend()を使用して、要素がメソッドに渡されない場合はdocument.bodyをデフォルトノードとして使用できます – fcalderan

関連する問題