CoffeeScript 활용의 근본적인 차이점은 무엇입니까 extends
대 Backbone.js extend
?CoffeeScript 'extends'와 Backbone.js`extend`의 근본적인 차이점
예를 들어, 방법
User = Backbone.Model.extend()
CoffeeScript 활용의 근본적인 차이점은 무엇입니까 extends
대 Backbone.js extend
?CoffeeScript 'extends'와 Backbone.js`extend`의 근본적인 차이점
예를 들어, 방법
User = Backbone.Model.extend()
두에서 동등한 것으로 의도된다
class User extends Backbone.Model
다르다.
0.3.0 : 백본 클래스는 이제 완벽하게 커피 스크립트 클래스에 의해 상속 될 수 Backbone.js 변경 로그를 인용합니다.
두 커피 스크립트의 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 코드를 구성하고 컴파일하는 방법에 대해 각 클래스는 컴파일 된 자바 스크립트의 클래스 정의 맨 위에 CoffeeScript의 __extends()
함수를 추가 할 수 있습니다. 수십 번 복제 된이 여분의 코드는 파일을 크게 팽창시킬 수 있습니다. common.js 모듈에서 코드를 래핑하는 프레임 워크를 사용하는 경우 특히 그렇습니다.
그래서 백본의 extend()
은 기본적으로 마른 컴파일 된 코드로 사용됩니다. 그런 다음 coffeescript 클래스 구문을 사용하는 것이 좋을 특별한 경우가 있으면 사용하십시오. 아껴서.
CoffeeScript는 컴파일 할 때 코드를 최적화합니다. 결과 파일은 CoffeeScript를 사용하지 않는 문자가 약간 더 많을 수 있지만 일반적으로 'class'는 일반적으로 더 효율적으로 실행됩니까? – rudolph9