0

以下のようにオブジェクトメソッドを呼び出します。

new Cout( elem1 ).load( 'body' )

new COut( elem1 ).display( 'email' )

一度に使用するインスタンスは1つだけです。一度に使用するインスタンスは1つだけなので、代わりthis.elementに渡されたものを削除して使用したいと思います。element

これは、静的またはインスタンスベースの要素で渡されるのだろうかと思いました。this.element(インスタンスベース)かもしれないと思います...明示的に述べていなくても。this.elementのすべての言及を要素だけで削除する予定です。

それは...ですか?

注:他に戻り値が指定されていない場合、これは暗黙的に返されます。

var COut = function ( element ) 
{
    var messages = 
    {
        name:         'Please enter a valid name',
        email:        'Please enter a valid email',
        email_s:      'Please enter a valid email.',
        pass:         'Please enter password, 6-40 characters',
        url:          'Please enter a valid url',
        title:        'Please enter a valid title',
        tweet:        'Please enter a valid tweet',
        empty:        'Please complete all fields',
        same:         'Please make emails equal',
        taken:        'Sorry, that email is taken',
        validate:     'Please contact <a class="d" href="mailto:fo@foo.com">support</a> to reset your password'
    };
    this.element = element;
    this.display = function( type ) 
    {
        this.element.innerHTML = messages[ type ];
    };
    this.load = function( location )
    {
        new AjaxRequest().invoke( 'ajax_type=async_load', function( response_text )
        {
            document[location].innerHTML = response_text;  
            new Cin().init( response_text.charAt( 6 ) ); // Correlate this point to Ajax Call.
        } ); 
    };
};
4

3 に答える 3

3

elementそうでもありません。これは、呼び出しごとに定義されるコンストラクターのローカル変数です。this明示的に設定されているため、これは のプロパティにすぎません。

var COut = function ( element ) 
{
    // ...
    this.element = element;
    // ...
};

this.elementそれでも、コンストラクター内で定義された関数/メソッドで正常に動作するのではなく、それを使用します。

var COut = function ( element ) 
{
    // ...
    this.display = function( type ) 
    {
        element.innerHTML = messages[ type ];
    };
    // ...
};

アクセスできないのは、代わりに を使用しprototypeてコンストラクターの外部でメソッドを定義した場合です。ここでelementは、範囲外です。しかしthis、そうthis.elementなるでしょう:

COut.prototype.display = function ( type ) {
     this.element.innerHTML = messages[ type ];

     element.innerHTML = messages[ type ]; // ERROR: `element` is not defined
};
于 2012-05-28T16:47:52.890 に答える
1

使用すると、クラスのメンバーthisになり、キーワードを使用してインスタンス化する必要があります。そうしないと、クラスのインスタンスを作成せずに使用する意味がありません。newthis

また、設定したものはすべてthisインスタンス メンバーになります。つまり、作成したインスタンスの各署名に追加されます。prototype代わりにプロパティを使用することで、これを回避できます。

于 2012-05-28T16:32:43.723 に答える
0

を使用せず、関数内でthis参照するだけの場合は、引数に渡す を参照します。elementelement

newオブジェクトを参照するたびに使用していますが、これは間違っていると思います。各インスタンスは、以前に設定したプロパティをthis認識せず、毎回同じ要素を渡す必要があります (これはあなたが行っていることですが、最初にオブジェクトを保存するだけであれば、その必要はありません)。インスタンス化します)。

それnewが - のクリーンなオブジェクトを提供することですthis

あなたが望むのは次のようなものだと思います:

var c = new Cout(some_element);
c.display();

コンストラクターで要素を this のプロパティとして保存すると、呼び出すときに問題c.display()なくアクセスできますthis.element

于 2012-05-28T16:36:14.880 に答える