私は現在、純粋な JavaScript よりも構文が優れており、記述/理解が容易であるため、coffee-script を検討しています。しかし、backbone と coffee-script を使用したチュートリアルでは、モデルを作成する方法が次のようになっていることがわかりました。
class User extends Backbone.Model
initialize: ->
alert 'start'
これはすべて良さそうに見えますが、使用extends
するとコンパイルがかなり奇妙になります...これは、javascriptでクラスを機能させるコーヒースクリプトの方法であることを理解しています。
(function() {
var User,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
User = (function(_super) {
__extends(User, _super);
function User() {
return User.__super__.constructor.apply(this, arguments);
}
User.prototype.initialize = function() {
return alert('start');
};
return User;
})(Backbone.Model);
}).call(this);
ただし、次を使用する場合:
User = Backbone.Model.extend
initialize: ->
alert 'start'
それははるかによくコンパイルされます(私がそれを書く方法にもっと似ています):
(function() {
var User;
User = Backbone.Model.extend({
initialize: function() {
return alert('start');
}
});
}).call(this);
モデルクラスを作成する方法の違いと、2番目の方法が純粋なjavascriptでモデルを作成する方法のようにコンパイルされるときに、最初の方法がチュートリアルでより頻繁に使用される理由を誰かに説明できますか?