2016-07-03 8 views
-4

이 내 객체Javascript in Object 직접 메쏘드를 호출하고 Object.create를 사용하는 것 사이의 리터럴 접근법의 차이점은 무엇입니까?

내가 greetFullName 메소드를 호출 할
// Object Literal 
var personObjLit = { 
    firstname : "John", 
    lastname: "Doe", 
    greetFullName : function() { 
     return "personObjLit says: Hello " + this.firstname + 
     ", " + this.lastname; 
    } 
} 

입니다 가정, 나는 두 가지 방법을 사용하여 호출 할 수 있습니다. var personObjLitObject = Object.create(personObjLit);

var personFullName = personObjLit.greetFullName();

    1. 나는이 두 가지의 차이점이 무엇인지 알고 싶어요. 나는 단지 다른 접근법을 의미하거나 그것은 메모리 또는 다른 것에 영향을 미친다.

  • +3

    "greetFullName을 호출하는 두 번째 방법"은 greetFullName을 호출하지 않습니다. –

    +0

    * "또는 메모리에 영향을줍니다"* - 분명히 두 번째 방법은 두 개의 개체와 첫 번째 단 하나만 사용하는 것이므로 어떻게 생각합니까? 하지만 메모리 문제로 인해 하나 또는 다른 것을하지는 않을 것입니다. 코드가 실제로 수행해야하는 작업에 따라 다른 작업을 수행 할 수 있습니다. – nnnnnn

    +1

    두 번째 방법은'personObjLit'을 프로토 타입으로 사용하여 새 오브젝트를 작성합니다. 그렇게하는 것은 바람직하지 않습니다. –

    답변

    0

    Object.create은 프로토 타입이 전달 된 객체로 설정된 새 객체를 만듭니다. 이 코드를 고려하십시오 : 당신은 단지 당신이 특정 프로토 타입과 새로운 객체를 생성에 관심이있는 경우 Object.create를 사용하려면

    var a = {}; 
    var b = Object.create(a); 
    
    a.propA = 'valueA'; // add a property to a 
    b.propB = 'valueB'; // add a property to b 
    
    a.propA; // "valueA" 
    b.propB; // "valueB" 
    b.propA; // "valueA" - inherited from a, which is b's prototype 
    a.propB; // undefined - only exists on b 
    

    . 이 작업을 수행 할 이유가 없으면 객체 리터럴 구문을 사용하는 것이 좋습니다.

    프로토 타입 체인에 대한 자세한 내용은 https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain을 참조하십시오.