coffeeScript 학습 02

5014 단어 coffeescrip

가방을 닫다

closure = do ->
  _private = "foo"
  -> _private

console.log(closure()) #=> "foo"

//`do` `Immediate Function`

(function() {
  var closure;

  closure = (function() {
    var _private;
    _private = "foo";
    return function() {
      return _private;
    };
  })();

  console.log(closure());

}).call(this);
  • 패키지 닫기 중에this의 값을 패키지에 연결하는 개인 변수가 자주 필요합니다CoffeeScript 특수한 것을 사용합니다=> 문법은 이 번거로움을 줄였다
  • element = document.getElementById('id')
    @clickHandler = -> alert "clicked"
    element.addEventListener "click", (e) => @clickHandler(e)
    
    //
    (function() {
      var element;
    
      element = document.getElementById('id');
    
      this.clickHandler = function() {
        return alert("clicked");
      };
    
      element.addEventListener("click", (function(_this) {
        return function(e) {
          return _this.clickHandler(e);
        };
      })(this));
    
    }).call(this);

    확장

  • js에서 모든 대상은 개방적이며 때로는 기존 대상의 행위를 확장할 수 있다
  • String::expends = -> @replace /_/g, "-"
    
    //
    (function() {
      String.prototype.expends = function() {
        return this.replace(/_/g, "-");
      };
    
    }).call(this);

    종류

    class Person 
      _private = 'value'  //private
      @sex: true          //Person.sex
      @log: ->            //Person.log
      	console.log 0
    
      @create: (name, age)->   
      	new Person(name,age)
    
      constructor: (@name, @age) ->
      log: ->                     //instance.log
      	console.log @name
      tell: =>                    //instance.tell
      	console.log @age
    
    jinks = new Person('jinks', 23)
    jack = Person.create('jack', 22)
    
  • constructor는 구조 함수입니다. 이 이름을 사용해야 합니다
  • 구조 함수에 실례 변수에 값을 부여하면
    <!--
    h='&#110;&#x61;&#x6d;&#x65;&#x5199;&#22312;&#21442;&#25968;&#x4e2d;&#x5373;&#x53ef;';a='&#64;';n='&#30452;&#x63a5;&#23558;';e=n+a+h;
    document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
    //-->
    인자에 atname를 직접 쓰면 됩니다.
    ,
    <!--
    h='&#110;&#x61;&#x6d;&#x65;';a='&#64;';n='&#x7b49;&#x4ef7;&#20110;&#22312;&#x51fd;&#25968;&#x4f53;&#x4e2d;&#30340;';e=n+a+h;
    document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
    //-->
    함수체에 있는atname와 같다
    = name
  • 실례 방법에 대해this를 =>로 귀속시켜야 패키지 전달이 가능합니다

  • 계승

    class Gadget
      constructor: (@name) ->
      sell: =>
      	"buy #{@name}"
    
    class Iphone extends Gadget
      constructor: -> super("iphone")
      nosell: =>
      	"Don't #{@sell()}"
    
    iphone = new Iphone
    iphone.nosell()
  • extends 키워드를 사용하면 부류의 모든 실례 속성, 예를 들어sell을 계승할 수 있다
  • 슈퍼 방법은 부류의 동명 방법을 사용할 수 있다
  • constructor를 덮어쓰지 않으면 이불류는 기본적으로 호출됩니다

  • 혼합(Mixin)


    루비 언어에서의 Mixin은 당신의 클래스가 여러 개의 모듈을 얻을 수 있는 방법으로 다중 계승에 좋은 실현이라고 할 수 있습니다
    class Module
      @extend: (obj) ->
      	for key, value of obj
      	  @[key] = value
    
      @include: (obj) ->
      	for key, value of obj
      	  @::[key] = value
    
    classProperties = 
      find: (id) ->
      	console.log ("find #{id}")
    
    instanceProperties = 
      save: ->
      	console.log ("save")
    
    class User extends Module
      @extend classProperties
      @include instanceProperties
    
    user = User.find
    user = new User
    user.save()
    
  • 모듈의 클래스를 계승해야만 Mixin을 할 수 있다. 물론 여기도 조합하거나 js의 구조 함수를 위해 Monkey patching을 할 수 있다
  • classProperties는 클래스 구성원 모듈입니다.
    <!--
    h='&#x65;&#120;&#116;&#x65;&#110;&#100;&#x6765;&#x4d;&#x69;&#120;&#x69;&#110;';a='&#64;';n='&#x4f7f;&#29992;';e=n+a+h;
    document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
    //-->
    at extend를 사용하여 Mixin
    , 구현은 간단한 복사 대상의 속성입니다
  • instanceProperties는 실례 구성원 모듈입니다.
    <!--
    h='&#x69;&#110;&#x63;&#108;&#x75;&#100;&#x65;&#x6765;&#x4d;&#x69;&#120;&#x69;&#110;';a='&#64;';n='&#x4f7f;&#29992;';e=n+a+h;
    document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
    //-->
    at include를 사용하여 Mixin
    , 구현은 복사 대상의 원형 속성입니다
  • 여기서 지적해야 할 것은 이 복사본은 인용 복사본으로 외부에서 Mixin의 모듈 내부 값을 변경할 수 있다는 것이다. 더 좋은 방법은 심층값 복사(clone)이다
  • 좋은 웹페이지 즐겨찾기