객체 생성

1. 객체 리터럴

var empty = {};
var point = { a:0, b:10};
var point2 = { a: point.a , b: point.b+1};
var person = {
  "피자" : "콜라",
  "치킨" : "맥주",
  "족발" : "소맥",
  "회" : "소주",
  "치즈" : "와인",
  hodoogwaja : {
    firstname : "hyungjoo",
    lastname : "lee"
  }
};

객체 리터럴은 평가될 때마다 새로운 객체와 프로퍼티를 생성, 초기화 한다. 즉 여러번 호출되는 함수 안에 있는 객체 리터럴에서 만드는 객체들은 다 다른 놈들이다. 당연 프로퍼티도 다른 애들.

2. new 생성자

var o = new Object();

3. 프로토타입

프로토타입 : 상속받는 상위 객체. 라고 이해하고 있음.
기존 객체의 프로퍼티들을 상속받으며 새로운 객체를 생성한다.

4. Object.create() – ES5

Object.create() 메소드를 사용한다. 첫번째 인자로 객체가 들어간다.

var o =Object.create(객체);

객체에 null 을 넣을 수도 있는데 그럼 걍 객체를 만들때 기본적으로 쓸 수 있는 어떤 메소드도 사용할 수 없다.
객체 리터럴로 만드는거처럼  만드려면

var o = Object.create(Object.prototype);

이렇게 하면 된다. Object.prototype 이 객체리터럴로 생성되는 객체들의 프로토타입인듯.

임의의 프로토타입으로 새 겍체를 만들 수 있다는 점이 매우 유용하다고 나와있는데, 그건 .prototype 역시 마찬가지 아닌가? *물어볼것

function inherit(p) {
  if (p == null) {
    throw TypeError();
  }
  if (Object.create) {
    return Object.create(p);
  }

  var t = typeof(p);
  if (t !== "object" && t !== "function") {
    throw TypeError();
  }

  function f() {};
  f.prototype = p;
  return new f();
}

의견을 남겨주세용