구조 함수 모드 - 기초

2425 단어
먼저 구조 함수 모델의 코드를 보면 다음과 같다. 그리고 더욱 분석할 것이다.
    function CreateJsPerson(name, age) {
        var obj = {};
        obj.name = name;
        obj.age = age;
        obj.writeJs = function () {
            console.log('my name is ' + this.name + ', age is ' + this.age);
        }
        return obj;
    }
    var p1 = CreateJsPerson('zhangsan', 48);
    p1.writeJs();
    var p2 = CreateJsPerson('lisi', 20);
    p2.writeJs();

함수 모드를 만드는 목적은 사용자 정의 클래스를 만들고 이 클래스의 실례를 만들기 위한 것이다.구조 함수 모드와 공장 함수 모드의 차이점:
  • 실행 시 일반 함수 실행 -> createJsPerson().구조 함수 모드->new CreateJsPerson(),new를 통해 실행된 후 우리의createJsPerson은 하나의 클래스입니다.함수가 실행하는 반환값(p1)은 CreateJsPerson의 인스턴스입니다.예를 들어 그룹을 만듭니다.
  •     var ary = []; //  
        var ary = new Array(); //   ->  
        //  ,ary Array 
    

    JavaScript에서 모든 클래스는 함수 데이터 형식입니다. 이것은 new를 통해 실행되고 하나의 클래스가 되지만 그 자체도 일반적인 함수입니다.JavaScript의 모든 인스턴스는 객체 데이터 유형입니다.
  • 함수 코드가 실행될 때 공통점: 모두 하나의 개인적인 작용역을 형성한 다음에 형참부치->예해석->코드가 위에서 아래로 실행된다.(클래스는 일반 함수와 마찬가지로 일반 함수의 한 면도 있다.)다른 점: 코드가 실행되기 전에 obj 대상을 수동으로 만들 필요가 없습니다. 브라우저는 기본적으로 대상 데이터 형식 값을 만들 것입니다. (이 대상은 사실 현재 클래스의 실례입니다.)다음 코드는 위에서 아래로 실행되고 현재 실례를 실행의 주체로 한다.this는 현재의 실례를 대표하고 각각 속성 이름과 속성 값을 현재의 실례에 부여한다.마지막으로 브라우저는 기본적으로 만든 실례를 되돌려줍니다.

  • 구조 함수 중의this는 구조 함수 모델에서 클래스(함수체 중), 출현한this.xxx = xxx; 중의this는 현재 클래스의 실례이다.
        function CreateJsPerson(name, age) {
            //   p1 -> this
            this.name = name;  // -> p1.name = name;
            this.age = age;    // -> p1.age = age;
            this.writeJs = function () {
                console.log('my name is ' + this.name + ', age is ' + this.age);
            }
            //  
        }
        var p1 = new CreateJsPerson('zhangsan', 20);
        p1.writeJs(); // this -> p1, writeJS -> this -> p1
    
        //  , 
        //  return, res = undefined,  CreateJsPerson this window
        var res = CreateJsPerson('wangwu', 10); // this -> window
    
        var p2 = new CreateJsPerson('li', 40);
        p2.writeJs(); // this -> p2
    

    p1과 p2는 모두 Create Js Person 같은 실례이기 때문에 write Js라는 방법을 가지고 있지만 서로 다른 실례 간의 방법은 다르다.클래스에서 실례에 추가된 속성(this.xxx = xxx;)은 현재 실례의 사유 속성에 속하고 실례와 실례 사이는 단독 개체이기 때문에 사유 속성 사이는 같지 않다.
    console.log(p1.writeJs === p2.writeJs); // -> false
    

    좋은 웹페이지 즐겨찾기