대상과 원형을 향한 (1)

4003 단어

정의


두 가지 방법으로 객체를 정의합니다.

new Object() 형식


새 Object()에서 객체를 정의합니다.객체를 통과합니다.속성 이름은 속성을 만들고 속성에 값을 부여합니다.
참고: new Object()의 new 키워드는 생략할 수 있습니다.
var obj = new Object(); //  var obj = Object();
obj.name = "hh"; //  obj   name  ,  hh。
alert(obj.age);

형식


직접 {}을 통해 대상을 정의합니다.첫 번째 방식에 비해 이 방식이 가장 상용된다.
  • 이 방법은 {} 내부에서 속성 이름: 속성 값 형식으로 속성을 정의할 수 있습니다.여기서 등록 정보 이름은 따옴표로 묶거나 제외할 수 있습니다.
  • {} 내부에서 속성을 정의할 때 각 속성 사이는 쉼표를 통해 구분된다.
  • 는 점문을 통해 속성을 정의할 수도 있다.
    var obj = {
        name:"fdafa", // 
        'age':20 // , , 
    };
    obj.sex=" "; //     。
    alert(obj.name+obj.age+obj.sex);
    
  • 는 이 방식으로 한 함수에 대량의 매개 변수를 전달할 수 있다.예를 들어 일반 방식
    function test(name,age,address,love){
        // do sth
    }
    test("name","age","address","love");
    
    에서test 방법을 호출할 때 전달하는 매개 변수의 순서는 정의할 때와 일치해야 한다. 그렇지 않으면 매개 변수의 혼란이 발생할 수 있다.다음과 같은 방식으로 수정할 수 있다.
    function test(obj){
        alert(obj.name); //  。  
        alert(obj.love)
    }
    
    test({
        name:"name",
        age:'age',
        address:'address',
        love:'love'
    }); //  , 
    
    이렇게 하면 전참을 할 때 익명의 대상만 전달할 수 있고 대상의 속성을 정의할 때도 매우 명확하다.

  • 속성 참조


    다음과 같은 두 가지 방법이 있습니다.
  • 점문을 통해 지정한 속성을 인용합니다.
  • 수조의 형식으로 인용하고 []는 문자열이어야 한다.
    var obj = {
        name:"fdafa",
    };
    obj.sex=" ";
    alert(obj.name+obj['sex']); // , 
    
  • 수조 형식을 통해 인용할 때 []에는 변수가 있을 수 있지만 조작할 때 []에는 변수의 값이 존재한다.
    var obj = {
        name:"fdafa-",
    };
    var p = 'name'
    alert(obj.name+obj[p]);
    
    obj[p]라고 쓰여 있지만 p는 변수이고 그 값은'name'이기 때문에obj[p]는obj['name']와 완전히 같다.이런 쓰기 방법은 for in 문장과 결합하면 한 대상의 모든 속성을 완전히 훑어볼 수 있다.
    var obj = {
        name:"fdafa",
        age:10
    };
    for(var p in obj){
        alert(p +"="+obj[p]);
    }
    

  • 정의 방법


    방법명도 일반 속성으로 일반 속성의 정의 방식과 같다.유일한 차이점은 함수를 사용하여 이 변수에 값을 부여하는 것이다.
  • 방법명을 일반적인 변수로 취급한다.
    var obj = {
        run:function(){
            return "run is obj.fun";
        } // run  , ,  run  
        'test':function () {
            return "test";
        } //  ,test  , 
    };
    alert(obj.run());
    
    var o2 = new Object();
    o2.run = function(){
        return "run is o2.function"
    } //      
    alert(o2.run())
    

  • 속성 삭제


    delete 속성 이름으로 지정한 속성을 삭제합니다.
    var obj ={
        name:'fdsa'
    }
    alert(obj.name)
    delete obj.name; //  obj   name  
    alert(obj.name);
    

    private와public 기능 실현


    구조 함수에서this를 통해 정의된 속성이나 방법은public로 외부에서 직접 사용할 수 있다.var을 통해 정의된 속성이나 방법은 외부에서 접근할 수 없습니다.이 특성을 이용하여 Getter와setter의 유사한 기능을 실현할 수 있다.
    function Demo(){
        var age;
        this.setAge = function(age){
            this.age = age;
        }
        this.getAge = function(){
            return this.age;
        }
    }
    
    var d = new Demo()
    
    d.setAge('aaa')
    console.log(d.getAge())
    

    외부에서age에 대한 조작은 getage와 setage를 통해서만 할 수 있습니다.자바 비안의 setter와getter 방법과 유사합니다.

    정적 속성 구현


    정적 속성이란 모든 대상이 공유하는 속성으로 한 대상이 이 속성의 값을 수정하면 다른 대상의 값도 따라서 바뀐다.
    (function(){
        var user
        Demo = function(value){ // Demo   var, 
            user = value;
            Demo.prototype.getUser = function() {
                return user
            };
        }
    })()
    var d = new Demo('first')
    console.log(d.getUser())
    
    var d2 = new Demo('second')
    console.log(d.getUser())
    

    모두 d 대상을 사용하여 출력합니다. 첫 번째 출력first, 두 번째 출력second.
    사용자는 익명 함수의 속성이므로 new Demo () 를 사용할 때마다 전달되는 값이 공유됩니다.

    constructor


    모든 대상은 constructor 속성을 가지고 있으며, 이 대상의 구조 함수를 가리킨다.
    js에 클래스가 없습니다. 일반 함수와 new 키워드를 연합하여 사용할 때 일반 함수는 구조 함수로 바뀌고 시스템은 이 구조 함수의 실례 대상을 만들 것입니다.
    function Demo(){
        
    }
    
    var d = new Demo()  //   new  ,Demo  ,  d  
    alert(d.constructor == Demo) // true
    

    좋은 웹페이지 즐겨찾기