자 바스 크 립 트 의 oo 라 이브 러 리

8767 단어 JavaScriptOO
이 항목 의 이름 은 May. js 로 변경 되 었 습 니 다. 내용 이 만 료 되 었 습 니 다. 참조 하 십시오 http://zhongxingdou.github.io/mayjs/
 
 
zero 는 자 바스 크 립 트 자 체 를 사용 하여 자 바스 크 립 트 를 개선 하고 자 하 는 시도 입 니 다. 현재 원본 코드 2000 이 되 지 않 습 니 다.
나 는 가능 한 한 그것 을 가볍게 해서 자바 script 위의 '새로운 언어' 가 되 지 않도록 했다.
 
프로젝트 원본: https://github.com/zhongxingdou/zero
나의 QQ: 624998961
QQ   :250988913

Zero
a JavaScript object oriented framework.
features:
  • keyword method zero 는 $를 접두사 로 하 는 일련의 키워드 방법 을 제공 합 니 다. 예 를 들 어 $class, $module, $interface...
  • global global 은 제로 의 변수 관리 체제 입 니 다. 제로 의 목 표 는 comonjs 의 규범 을 실현 하 는 것 을 포함 하지 않 습 니 다. $global 과 관련 된 키워드 방법 은 패키지 관리 이외 의 경 량 의 대상 인용 체 제 를 제공 할 뿐 사용 하 는 사람 이 패키지 관리 시스템 을 사용 하 는 데 방해 가 되 지 않 습 니 다. 제로 에는 세 개의 전역 변수, z, $global, $run
     //          ,         
     $run(function(){
         eval($global.all); //    $global         ,            
    
         //some code …
    
         $global("obj1", obj1); //        $global  
     })
    
     /*
           ,run                    $global     ,
                  $global.run        
     */
     $global.run(function(obj1, obj2, obj3){
         var prop = obj1.prop; 
         obj2.xx(); 
         //...
     })
    
  • 이 포함 되 어 있 습 니 다.
  • module
     //                   ,                    
     function $module(o){
         return o;
     }
    
     //  $module      ,
     var MAmodule = $module({
         onIncluded: function(){
             this.prop1 = {}; //this         
         },
         prop: {},
         method: function(){}
     });
    
     $(obj).include(MAmodule);
    
  • class
     //                z.Base
     var Class = function(){
         this.callBase(); //     constructor
    
         this.property("prop"); //      prop
    
         this.property({
             "prop1": {},
             "prop2": {
                 get: function(){},
                 set: function(){}
             }
         });
    
         this.include(module); //      
     }
    
     Class.prototye = {
         sayHello: function(){
             this.callBase(); //     sayHello
         }
     }
    
     /* 
        z.Base,                   
      z.Base Zero    ,         
      $class(Class)      Class     extend,implement,include     ,
           Class  
      */
     $class(Class).extend(z.Base).implement(AInterface);
    
  • wrapper wrapper 는 대상 의 확장 메커니즘 입 니 다. $(obj) 를 사용 하여 obj 를 참조 하고 확장 모듈 을 포함 하 는 새로운 대상 을 만 들 수 있 습 니 다. 대상 자 체 를 직접 확장 하지 않 습 니 다. $(obj) 는 모듈 확장 대상 을 직접 사용 합 니 다. $와 $는 관리 하 는 확장 모듈 의 등록 정보 와 대상 자체 의 유형 과 인터페이스 에 따라 대상 을 확장 하 는 방법 을 결정 합 니 다.
     var StringWrapper = $module({
         capitalize: function(){
             var o = this.target;
             return o.charAt(0).toUpperCase() + o.slice(1);
         }
     });
    
     var NumberWrapper = $module({
         next: function(){ return this.target.valueOf() + 1; }
     });
    
     $.regist(StringWrapper, String, "stringWrapper");
    
     $.regist(NumberWrapper, Number, "numberWrapper");
    
     $.setDefault(String, "stringWrapper");
    
     $("string").capitalize();
    
     $(8).wrap("numberWrapper").next();      
    
     var str = $$("string");
     str.capitalize();
    
  • is zero 는 $is () 통 일 된 유형 판단 방식
     //    typeof
     $is('string', 'abc');
    
     //              
     $is(Function, function() {});
    
     //         
     $is(null, obj);
     $is(undefined, obj);
    
     var spec = $spec({
         "instanceOf": B,
         "prototypeOf": Object.prototype,
         "typeof": "type"
     });
    
     $is(spec, obj); //    
    
  • 을 사용 하려 고 시도 했다.
  • interface 는 동적 언어 대상 의 구성원 이 변화 할 수 있 기 때문에 그 유형 이나 구조 함수 나 원형 체인 으로 그의 구성원 이 존재 하 는 지, 사용 가능 한 지 를 확인 할 수 없 기 때문에 명시 적 인터페이스 와 대상 을 직접 비교 하면 대상 이 특정한 '유형' 에 속 하 는 지 더욱 정확하게 정할 수 있다. 또한 동적 언어 대상 의 구성원 이 변경 하 는 경로 가 다양 하 다.강 한 유형의 언어 처럼 코드 에서 대상 의 인 터 페 이 스 를 쉽게 볼 수 없 기 때문에 명시 적 인 인 터 페 이 스 는 일정한 문서 기능 이 있 습 니 다. 또한 인 터 페 이 스 는 방법의 매개 변수 검증, 방법의 과부하 등 다른 곳 에 도 사용 할 수 있 습 니 다. 인 터 페 이 스 는 반드시 $interface 를 사용 하여 설명 할 필요 가 없습니다. IInteface 인터페이스 에 맞 는 일반 대상 도
     var IBase = $interface({
         member: {
             prop: String, //        
             method: "function(p1, p2)", //         function,           
             prop3: {
                 type: { //            
                     instanceOf: "prop3", 
                     prototypeOf: [Object]
                 },
                 value: {}, //   
                 check: function(v){}, //       
                 required: true,  //         
                 ownProperty: true //                   
             },
             prop4: {type: [String, Number]}            
         },
         type: Object, //     
         freeze: true, //      ,       member     
         base: IObject //   
     })
    
     //     member type,         
     var IBase = $interface({
         prop: String,
         method: "function(p1,p2)"
     }, Object)
    
     $support(Interface, aObj); //             
    
  • function option zero 약정 방법의 option 속성 은 방법 매개 변 수 를 나타 내 는 interface 입 니 다. 이 인터페이스 가 있 으 면 매개 변수 검증 을 편리 하 게 실현 할 수 있 습 니 다. 또한 일반 매개 변수 전달 형식 과 key / value 대상 전달 매개 변 수 를 지원 합 니 다. 또한 방법 을 다시 불 러 옵 니 다. 매개 변수 그룹 묵 인 값 과 현재 설정 한 합병 도 있 습 니 다. zero 는 2 개 이상 의 매개 변수 방법 에 매개 변수 인터페이스
     fn = function(p1, p2) {
         var option = $option(); //      key/value  ,            
         $support(fn.option, option); //          
    
         //option.key1
         //option.key2
         //option.key3
         //...
     }
    
     fn.option = { key1: {value: {}}, key2: {value: {}}, key3: {}}
    
     //           option
     var fn = $fn(function(){//...}, {key1: {}, key2: {}});
    
     fn("p1", "p2");
    
     fn({
         key3: {},
         key2: {}
     });
    
    를 설정 하 는 것 을 권장 합 니 다.
  • overwrite zero 는 $overwrite () 를 통 해 재 부팅 방법 을 할당 할 수 있 는 주 방법 을 만 들 수 있 습 니 다. 주 방법 도 사용자 정의 할 수 있 습 니 다. $dispatch () 를 사용 하여 현재 매개 변수 와 재 부팅 방법의 인터페이스 에 따라 실행 할 방법 을 선택 한 다음 수 동 으로 이 방법 을 사용 할 수 있 습 니 다.
         var fnWithStringAndNumber = function(){}
         fnWithStringAndNumber.option = {
             name: 'string',
             age: 'number'
         }
    
         function fnWithTwoString(){
             //do something...
         }
    
         fnWithTwoString.option = {
             name: 'string',
             interest: 'string'
         }
    
         var fn = $overwrite(fnWithStringAndNumber, fnWithTwoString);
    
         fn("jim", 8); //call fnWithStringAndNumber
    
         //  $dispatch        
         var fn2 = function(){
             var args = ["jim", 8];
             var fn = $dispatch([fnWithStringAndNumber, fnWithTwoString], args);
             fn.apply(this, args);
         }
    
  • inspect
    Object.prototype.m = {};
    
    var obj = {p: {}, __p: {}, fn: function(){}, __fn: function(){}};
    
    var o = $inspect(obj);
    
    o.methods();  
    //--> ["fn", "__fn"]
    
    o.publicMethods();
    //--> ["fn"]
    
    o.privateMethods();
    //--> ["__fn"]
    
    o.fields();
    //--> ["p", "__p", "m"]
    
    o.publicFields();
    //--> ["p", "m"]
    
    o.privateFields();
    //--> ["__p"]
    
    o.keys();
    //--> ["p", "__p", "fn", "__fn"]
    
    o.allKeys();
    //--> ["p", "__p", "fn", "__fn", "m"]
    
    o.proto();
    //--> Object {}
    
    o.protoLink();
    //--> [Object {}]
    
    o.creator();
    //--> Object()
    
  • utilies and more
  • $every, $everyKey, $trace
  • 대상 조작 $copy, $merge, $slice, $property
  • 대상 공장 $enum, $array, $fn
  • 대상 반사 $traceProto, $callBase
  • 실 용적 인 방법 $isPrivate, $keys, $thisFn, $contains All

  • 좋은 웹페이지 즐겨찾기