2015년 11월 19일 목요일

Chrome 에서 이벤트 모니터 명령

http://stackoverflow.com/questions/10213703/how-do-i-view-events-fired-on-an-element-in-chrome-web-developer

 
monitorEvents($0) 모니터 On

unmonitorEvents($0) 

 

Android Home 화면에 Floting 띄우기

http://www.addictivetips.com/android/floata-add-a-floating-button-to-your-screen-to-tweet-from-any-app/

 

https://droidqd.wordpress.com/2015/01/07/how-to-make-a-floating-face-bubble-on-home-screen-in-android/

2015년 11월 13일 금요일

일본말 이런거 없다

愛してる보다 すきです 라고한다

귀엽게 보인다를 かわいそうだ라고 하면안됨

잘한다를 じょうだ 하지않고 得意라한다

친절한은 자기가즉 일때는優しだ

잘있나요 お元気ですか

입이 무거운건 口が堅い  口が軽い

그립다   사랑:恋し 사모:慕わしい 과거:懐かしい

섭섭하다 名残惜し( 주로 헤어지기섭섭)보다 水臭い

그냥싫을땐嫌だ  . 사람이싫을땐きらいだ

잘놀았을때 楽しかった

맛있다 속시원하다 솜씨가좋다うまい

스트레스등 일방적으로 받을때는 受ける

냄새바난다 においがある. でる아님

기르다 飼う 알아차리다気がつく

자칫하면 下手したら

助けるㄹ 위험한삼황에  手伝う는거들다

살았다.고마워요는 助かる

사람깔볼땐 馬鹿にする.사물은 無視する

공부가 잘한다는 上手가아니라できます때론 잘한다라는 뜻임

思いやり배려 望む원하다

寝る는 동침으로도 많이 쓰임.자고오다는 泊まって来た

교제술 담배등은 끊다 가 辞める

考える는지적인 생각 思う는 감정등

既に이미

切れる는 물건이 다팔려쓸때  쓰임

ついでに하는김에

모른다 知りません  しっていません이아님

택시잡다 タクシーを拾う

잘 만들었다 よくできていますね

희마은 ぜひ 결의는きっと

이루어지다 叶う 초조하다 焦る

이이상 もうこれ

새치기 割り込み

まぐれ우연히

おもいっきり마응껏

차라리 いっそ

일본어의 ヘルス 는 대표적인 섹스산업 .ジミ라고 함

非常に대단히  매우

つらい과롭다

ちなみに덕붙여서

2015년 11월 8일 일요일

JAVASCRIPT 상속 @,.@ 권장

http://chaospace.tistory.com/194 권장

2015년 11월 5일 목요일

자바스크립트 패턴스


  • 전역변수의 최소화. 필수

  •  var a=b=0; 이면 b 는 전역변수가 된다. <- 안티패턴

  • 암묵적 타입캐스팅 피하기 , 비교는 ===

  • eval() 피하기

  • parseInt 의 두번째 매개변수(진수선택)은 반드시 넣어야 한다. 왜냐면 0으로 시작되는 문자열을 8진수로 오해해서 가져올수 있기때문에. parseInt("06",10); 와 parseInt("06")은 다른거다.

  • javascript 에서는 중괄호는 앞의 명령문과 동일한 행에 두어야 한다. 그렇지 않으면 javascript 엔진에서 해당줄에 자동으로 세미콜론을 삽입하기 때문이다.(한줄 아래에 중괄호 두는 것은 자바스크립트에서는 금지)

  • new Object 로 객체 생성 <- 안티패턴

  • new Array로 배열생성 <- 안티패턴 (권장 : 대괄호로 생성)

  • 배열인지 판별은 Array.isArray(배열) 로 하는것을 권장

  • 설정객체패턴( 인자를 객체로 전달하는 방식)으로 하면 나중에 유지보수가 쉽다. 

  • 커링에 대해서도 이해하자.

  • 클로져로 비공개 멤버 구현가능
    function A(){ var privateValue ='pv'; this.getName=function(){return privateValue;}

  • 체이닝 패턴은 this 를 리턴하면됨.

  • 메쏘드 패턴도 이해하자.

  • 상속방법
    inherit(Child,Parent){ C.prototype = new P();} ...overriding?

  • 디자인패턴



  1. 싱글톤

    //싱글톤객체 즉시실행함수형태

    var Stone = (function(){

    var instance;

    function init() {

    function privateMethod(){

    console.log( "private  메쏘드" );

    }

    var privateVariable = "Private 멤버변수";

    return {

    publicMethod: function () {

    console.log( "public 메쏘드" );

    },

    publicProperty: public 멤버변수"

    };

    }; //init

     

    return {

    // getInstance() 하면 인스턴스가 없다면 생성하고 있다면 인스턴스를 리턴

    // 결국  instance 는 init() 함수 객체를 바라보게 된다.

    getInstance: function () {

    if ( !instance ) {

    instance = init();

    }

    return instance;

    }

    };

    })();

    var s1 = Stone.getInstance();

    var s2 = Stone.getInstance();

    console.log( s1 === s2 ); // true

    //s1.changepublic();

    s1.publicProperty="hey";

    console.log( s2.publicProperty ); // true

  2. factory pattern
    function Pizza_cheeze() {console.log('cheeze');

    }

    function Pizza_pineapple() {

    console.log('pineapple');

    }

    function PizzaFactory(whichStyle) {

    var pizza = this.createPizza(whichStyle);

     

    this.bake(pizza);

    this.boxing(pizza);

     

    return pizza;

    }

    PizzaFactory.prototype.pizzaClass = Pizza_cheeze;

    PizzaFactory.prototype.bake = function(pizza){

    console.log('bake');

    };

    PizzaFactory.prototype.boxing = function(pizza){

    console.log('boxing');

     

    };

    PizzaFactory.prototype.createPizza = function(whichStyle) {

    switch(whichStyle) {

    case 'cheeze':

    this.pizzaClass = Pizza_cheeze;

    break;

    case 'pineapple':

    this.pizzaClass = Pizza_pineapple;

    break;

     

    };

    return new this.pizzaClass;

    };

    var pizzacheeze = new PizzaFactory('cheeze');

    var pizzapineapple = new PizzaFactory('pineapple');

     

  3. Decorator Pattern
    //기본객체
      function Car() {

          console.log('car frame');

          this.price = 1000;


        }


      //가격정보얻기

      Car.prototype.getPrice = function() {

          return this.price;

      };

    //데코레이터 배열

        Car.CarDecorators = {};


      //파워윈도우 옵션질

      Car.CarDecorators.powerWindow = {

          getPrice : function() {

              var price = this._super.getPrice();

             price += price *5 /100;

              return price;

          }

      };

    //
      Car.prototype.decorate = function (decorator) {

          var F = function () {},

          overrides = this.constructor.CarDecorators[decorator],

          i,

          newobj;

          // Create prototype chain

          F.prototype = this;

          newobj = new F();

          newobj._super = F.prototype;

          // Mixin properties/methods of our decorator

          // Overriding the ones from our prototype

          for (i in overrides) {

              if (overrides.hasOwnProperty(i)) {

                  newobj[i] = overrides[i];

              }

          }

          return newobj;

      }

      var car2 = new Car(50);

      car2 = car2.decorate('powerWindow');

      console.log(car2.getPrice()); // outputs $CDN52.50


2015년 11월 3일 화요일

JAVASCRIPT 성능 최적화


  • 스크립트는 body 최하단

  • 자주쓰는 스코프 외부변수는 지연변수에 복사해서 쓰면 속도가 개선된다.

  • for .. in 은 느리다.

  • 대량 루프일때 반복횟수 줄이기 Duff's device , 제프 그린버그의 방법참고.

  • ..대략 아는내용

이펙티브 자바스크립트

이책은 사야됨 .정말로. 혼또우니~

  • == 비교는 절대금물, 자바스크립트는 지 맘대로 형변환을 하기때문에 == 비교는 절대 안됨. ===권장

  • 전역변수는 아예 사용하지마라. 단 플랫폼에 대한 프로퍼티를 참고 할때만 전역변수에 접근해라.

  • 지역변수 선언시 var 를 잊지마라. 잊는순간 전역변수가 될수도 있다.

  • Closure 는 이해하기 어렵지만 익숙해지면 좀더 유연한 프로그래밍이 가능하다.별도 게시물 준비.

  • 함수내에서 모든 변수는 호이스트 된다. !!

  • 지연변수 스코프(private 한 변수)를 만들기 위해서는 즉시함수를 이용하면된다.
    함수 또는 객체내에서 내부함수와 클로져를 이용할때, 변수의 호이스트로 인해서 변수에 아무리 변화를 줘도 최종값만 나오는 경우가 있다.
    따라서 이때는 즉시실행함수로 wrapping 시킨다음, 내부변수에 재할당을 통해서 지역변수 스코프를 만들수 있다.
    function A(arg1){  for(i=0;i<arg1.length,i++){ result[i]=function( arg1[i]; ); } }
    위의 코드에서 i 는 항상 호이스트 되기 떄문에 result[i] 는 항상 arg1의 마지막 값만 저장한다.
    따라서 (function(){ var j=i; result[i]=function( arg1[j]; )})(); 로 변경해야한다.IIFE??

  • 고차함수에 익숙해 져라. 공통된 로직은 고차함수로 리펙토링을 고려해 보자

  • 절대! argments 객체를 수정하지 마라.

  • 변수에 argments 의 참조를 저장해라.

  • 비공개 데이터를 저장/보전하기위해서 클로져를 사용해라.

  • 인스턴스 상태는 인스턴스 객체에 저장하라. 즉, 프로토타입에 변수나 배열등의 값을 배치하지마라. 프로토타입에는 프로토타입을 이용하는 객체들의 공유값만을 저장해라.

  • 따라서 하위 클래스(프로토타입)에서 상위(인스턴스)의 생성자를 호출할 필요가 있다.

  • 표준 클래스는 상속하지마라.

  • 순서사 정해진 컬렉션에는 딕셔너리 대신 배열을 사용해라(딕셔너리는 hash 배열이기 때문에 for in 으로 불러내도 순서가 보장되지 못한다.)

  • 배열을 반복할때 for...in 으로 하면 key 를 스트링으로 인식하여 순서가 보장되지 않으므로   for 반복문을 사용하라

  • 순서가 상관없다면 반복메서드(  object.forEach, map, filter) 등을 for (i......n) 대신에 이용하면 코드도 짧아지고 가독성도 좋아진다.

  • arguments 는  array 를 상송받지 않기 때문에 forEach 를 사용할수 없다. -> call 을 사용한다.

  • 또한 dom object 또한 array 를 상속받지 못한다. -> call 을 사용한다.

  • 배열 생성자 new 대신에 배열리터럴에 그냥 대입해서 배열을 만들자. 굳이 배열에 new 를 쓸필요는 없다는 것이다.