2012-01-06 8 views
2

私はいくつかの先進的なJavaScriptの人々と協力し、彼らのコードにSUPERキーワードを使用しています。私は、どのように、なぜこれを使うことができるのか、それを使用するのかをよく理解していません。どのように&SUPERをコードで使用するのですか?

誰かが私に指示したり、その使い方や推論に精通する方法を教えてもらえますか?ここ

は、いくつかの例は、次のとおり

openup: function($super) { 
    $super(); 
    this.shop.enable_access(); 
} 



addLeft: function(data) { 
    var cell = Element('td'); 
    if (data.item_data) { 
     var item = new SRIL(data.item_data); 
     item.attach(cell); 
     item.show(); 
    } 

    return cell; 

}

var SRIL = Class.create(Module, { 
initialize: function($super, data) { 
    $super({ dom: 'show_line' }); 
    this.data = data; 
    if (data.Type[0] == 'Car') { 
     //some code 
    } 
    else { 
     // some code 
    } 
} 

})。

+1

あなたは 'SUPER'または' super'を意味しますか?大事な事柄。 –

+1

'$ super'は物事を変えます - キーワードではなく単なる変数です。 – pimvdb

+2

このコードはPrototype.jsフレームワーク上に構築されているようです。http://www.prototypejs.org/learn/class-inheritance –

答えて

2

JavaScriptにはこのようなことはありません。

更新:ここで使用しているライブラリのドキュメントをご覧ください。これは言語機能ではなく、ライブラリ機能です。

+3

[予約された将来のキーワード](http://es5.github。 com /#x7.6.1.2)、それは "持っています"。しかし、それを使用する実装があるかどうかはわかりません。 – pimvdb

+0

JSでクラスを作成してSUPERクラスとして継承することはできませんか?私はcoffeescriptでそのようなものを見たと思う。 –

+0

@Alex M:JavaScript自体ではなく、プロトタイプで直接実装することができます。この質問はJavaのように思えます<->私にはJavaScriptの問題です。 – copy

1

Javascriptは古典的な継承を持たず、代わりにプロトタイプ/機能モデルに従って構造化されているため、開発者は古典的なモデルを再作成する際にさまざまな試みを行っています。 superはそのような戦略の一部です。それが解決する特定の問題は、たとえそれがコンストラクタであっても同じメソッドを親オブジェクトとして持つ子オブジェクトの場合です。親のメソッドのエイリアスとしてsuperを作成しないと、そのようなメソッドにアクセスすることはやや面倒になります(場合によっては不可能になります)。

John Resigはこれをかなりうまく示しているwrapperを持っています。最初の例で_super()を使用して親オブジェクトのダンスメソッドを呼び出すことに注意してください。

+0

私は、その使用法に関する参考文献のコードにいくつかの例を追加しました。 –

+0

そのような場合、開発者は親メソッドを直接参照するのにおそらく '$ super'を使用しています。言い換えれば、 '$ super'は、最初の例では' open_up'と呼ばれ、2番目の例では親 'initialize'メソッドを指すと仮定します。 – glortho

関連する問題