JS:day13

5835 단어
이어받다
1. 원형 개체 체인 과 Object. prototype
  hasOwnProperty()            //                 
  propertyIsEnumerable()      //             
  isPrototypeOf()             //                   
  valueOf()                   //          
  toString()                  //            

    Object.prototype.add = function(value){
        return this + value;
    };
    var book = {
        title:"hello world"
    };
    console.log(book.add(5));
    console.log("title".add("end"));


2. 대상 상속 (Object. create)

    var person1 = {
        name:"Anqi",
        sayName:function(){
            console.log(this.name);
        }
    };
    var person2 = Object.create(person1,{
        name:{
            configurable:true,
            enumerable:true,
            value:"Hello",
            writable:true
        }
    });
    person1.sayName();
    person2.sayName();


3. 구조 함수 의 계승 (두 가지 방식)

    function Rectangle(length,width){
        this.length = length;
        this.width = width;
    }
    Rectangle.prototype.getArea = function(){
        return this.length * this.width;
    };
    Rectangle.prototype.toString = function(){
        return "[Rectangle" + this.length + "x" + this.width + "]";
    };
    function Square(size){
        this.length = size;
        this.width = size;
    }

//    Square.prototype = new Rectangle();
//    Square.prototype.constructor = Square;
//                 
    Square.prototype = Object.create(Rectangle.prototype,{
        constructor:{
            configurable:true,
            enumerable:true,
            value:Square,
            writable:true
        }
    });

    Square.prototype.toString = function(){
        return "[Square" + this.length + "x" + this.width + "]";
    };

    var rect = new Rectangle(5,10);
    var square = new Square(6);

    console.log(rect.getArea());
    console.log(square.getArea());

    console.log(rect.toString());
    console.log(square.toString());


[중요 한 2 단 코드!]
    Square.prototype = new Rectangle();
    Square.prototype.constructor = Square;
Square.prototype = Object.create(Rectangle.prototype,{
        constructor:{
            configurable:true,
            enumerable:true,
            value:Square,
            writable:true
        }
    });

3. 구조 함수 의 절취
콜 () 과 apply () 를 사용 하 는 것 이 구조 함수 절취 의 관건 이다.

    function Rectangle(length,width){
        this.length = length;
        this.width = width;
    }
    Rectangle.prototype.getArea = function(){
        return this.length * this.width;
    };
    Rectangle.prototype.toString = function(){
        return "[Rectangle" + this.length + "x" + this.width + "]";
    };
    function Square(size){
        Rectangle.call(this,size,size);
    }

    Square.prototype = Object.create(Rectangle.prototype,{
        constructor:{
            configurable:true,
            enumerable:true,
            value:Square,
            writable:true
        }
    });

    Square.prototype.toString = function(){
        return "[Square" + this.length + "x" + this.width + "]";
    };

    var square = new Square(6);

    console.log(square.length);
    console.log(square.width);
    console.log(square.getArea());


4. 부모 클래스 에 접근 하 는 방법
Square.prototype.toString = function(){
        var text = Rectangle.prototype.toString.call(this);
        return text.replace("Rectangle","Square");
    };

이 방법 은 Square. prototype. toString 을 Rectangle. prototype. toString 으로 바 꾸 는 것 이 부모 클래스 에 접근 하 는 유일한 방법 입 니 다.
대상 모드
1. 모듈 모드
모듈 모드 는 개인 데 이 터 를 가 진 단일 대상 을 만 드 는 데 사용 되 는 모드 입 니 다.

    var person =(function(){
        var age=25;
        return{
            name:"Anqi",
            getAge:function(){
                return age;
            },
            setAge:function(value){
                age=value
            }
        }
    })();
    person.setAge(20);
    console.log(person.getAge())


다음은 변 경 된 노출 모듈 모드 입 니 다.

    var person = (function(){
        /*  */
        var age=25;
        function getAge(){
            return age;
        }
        function setAge(value){
            age=value;
        }
        return{
            /*   */
            name :"Anqi",
            getAge:getAge,
            setAge:setAge
        }
    })();


2. 구조 함수 의 개인 구성원
구조 함수 에서 개인 데 이 터 를 정의 합 니 다.

    /*            */
    function Person(name){
        //  
        var age;
        this.getAge = function(){
            return age;
        };
        this.setAge = function(value){
            age = value;
        };

        this.name=name;
    }
    var anqi = new Person("Anqi");
    anqi.setAge(24);
    console.log(anqi.getAge())


3. 역할 영역 안전 한 구조 함수
new 연산 자 를 사용 하지 않 고 this 값 을 직접 호출 하면 오류 가 발생 할 수 있 습 니 다.

    function Person(name){
            this.name = name;
    }
    Person.prototype.sayName=function(){
        console.log(this.name)
    };
    var Anqi = Person("anqi");

    console.log(Anqi instanceof  Person);     // false
    console.log(typeof Anqi);       // undefined


이 모드 를 사용 하여 new 의 사용 여부 에 따라 함수 의 행동 을 제어 할 수 있 습 니 다.
function Person(name){
        if(this instanceof Person){
            this.name = name;
        }else{
            return new Person(name);
        }
    }

좋은 웹페이지 즐겨찾기