5-JavaScript - 객체 만들기 - 세 가지 중요한 모드

2811 단어
  • 1, 공장 모델
  • function createPerson(name,age,job){
        var o = new Objec();
        o.name = name;
        o.age = age;
        o.job = job;
        o.sayName = function(){
            console.log(this.name);
        }
        return o;
    }
    
    var person1 = createPerson("lpove",18,"font-end Engineer");
    var person2 = createPerson("pandada",22,"UI");
    // 
    
  • 2, 함수 모델 구축
  • function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = function(){
            console.log(this.name);   
        }
    }
    var person1 = Person("lpove",18,"font-end Engineer");
    var person2 = Person("pandada",22,"UI");
    //  person1 === person2  false
    
    

    createPerson()과의 차이점: - 1, 뚜렷한 창설 대상 없음 - 2, 속성과 방법을this 대상에 직접 부여 - 3, return 문장 없음 - 4, 대문자 시작 Person
    새로운 Person 실례를 만들 때마다 우리는 다음과 같은 몇 가지 농담을 했다. - 1, 새로운 대상을 만들다. - 2, 구조 함수의 작용역을 새로운 대상에 부여한다. (그래서this도 이 대상을 가리킨다) - 3, 구조 함수의 코드를 실행한다. - 4, 새로운 이미지를 되돌려준다.
    -그래서 우리도 이렇게 계산 함수 모드의 코드를 체크할 수 있다.
    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName =new Function(
            console.log(this.name);   
        )
    }
    

    --물론 우리는 매번 이렇게 함수를 실례화할 필요가 없기 때문에sayName을 밖에 놓고 실현할 수 있다---
    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = sayName;
    }
    
    function sayName(){
        console.log(this.name);
    }
    
    

    - 그 동안 우리는 함수를 구조 함수 밖에 두었다. 우리는 두 함수인person1과person2를 해결하고 같은 일을 했다. 그러나 우리의 함수는 전체 국면의 작용역에 노출되어 우리가 실현해야 할 봉인성은 의미가 없다.그래서 저희는 JavaScript의++prototype++로 문제를 해결하기로 했습니다.
  • 3, 원형 모델
  • function Person(){}
    
    Person.prototype.name = "lp";
    Person.prototype.age = 18;
    Person.prototype.job = "UI";
    Person.prototype.sayName = function(){
        console.log(this.name);
    }
    
    var person1 = new Person();
    person1.sayName(); // "lp"
    var person2 = new Person();
    person1.sayName(); // "lp"  lp  
    console.log(person1.sayName == person2.sayName); //true
    
    var person2 = new Person();
    person2.name = "panda";
    console.log(person2.name);// panda 
    
    

    --이제 우리는 함수의 다른 문제를 해결하고 우리의 구조 함수에 넣었다--
    --위의 코드를 따라, 우리는 hasOwnProperty() 함수를 사용하여 실례화된 대상인지 아닌지를 판단한다.
    function Person(){}
    
    Person.prototype.name = "lp";
    Person.prototype.age = 18;
    Person.prototype.job = "UI";
    Person.prototype.sayName = function(){
        console.log(this.name);
    }
    
    var person1 = new Person();
    var person2 = new Person();
    console.log(person1.hasOwnProperty("name")); //false  
    
    person1.name = "panda";
    console.log(person1.hasOwnProperty("name")); //true  
    //  in  ,  true,  in  prototype
    

    좋은 웹페이지 즐겨찾기