CoffeeScriptを利用する際の基本的な違いは何ですか?extends
とBackbone.js extend
は何ですか?CoffeeScriptの「拡張」とBackbone.jsの「拡張」との間の基本的な違い
は、例えば、どの
User = Backbone.Model.extend()
CoffeeScriptを利用する際の基本的な違いは何ですか?extends
とBackbone.js extend
は何ですか?CoffeeScriptの「拡張」とBackbone.jsの「拡張」との間の基本的な違い
は、例えば、どの
User = Backbone.Model.extend()
2から等価であることが意図されている
class User extends Backbone.Model
異なっています。 Backbone.jsの変更履歴を引用するには:
0.3.0:Backboneクラスは、CoffeeScriptクラスによって継ぎ目なく継承されるようになりました。
両方のCoffeeScriptのChild extends Parent
とバックボーンのChild = Parent.extend()
三つの重要な事柄を実行します。
ctor
プロトタイプParent.prototype
ある機能ですnew ctor
にChild.prototype
を設定します。それはプロトタイプの継承を確立する。Parent
のすべての静的特性をChild
にコピーします。Child.__super__ = Parent
を設定します。これは、主にChild
のメソッドでCoffeeScriptのRubyのようなsuper
キーワードをサポートするためです。いくつかの違いがあります。バックボーンのextend()
メソッドを使用すると、super
や静的なプロパティ/メソッドのようなCoffeeScriptのクラス構文的な砂糖がなくなります。 (間違った)にコンパイル
Model = Backbone.Model.extend
set: (attrs, options) ->
super
...
var Model;
Model = Backbone.Model.extend({
set: function(attrs, options) {
return set.__super__.constructor.call(this, arguments);
}
});
あなたはしかし、スーパーこの方法を使用することができます(正しい)にコンパイル
Model = Bakbone.Model.extend()
Model::set = ->
super
...
var Model;
Model = Backbone.Model.extend();
Model.prototype.set = function() {
return Model.__super__.set.apply(this, arguments);
};
coffeescriptクラスの欠点、dependiどのようにコードを整理してコンパイルするかについては、コンパイルされたjavascriptのクラス定義の先頭にCoffeeScriptの__extends()
関数を追加することができます。何十回も複製されたこの余分なコードは、あなたのファイルを大幅に膨張させることができます。 common.jsモジュールでコードをラップするフレームワークを使用している場合は特に当てはまります。
したがって、私はバックボーンのextend()
を、デフォルトでは、コンパイルされたコードのために使用します。次に、coffeescriptクラスの構文を使用するのが良い特別なケースがある場合は、先に進んで使用してください。控えめに。
CoffeeScriptは、コンパイル時にコードを最適化しますが、結果のファイルはCoffeeScriptを使用しないで少し文字数が多いかもしれませんが、 'class'は一般的に効率的に実行されますか? – rudolph9