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(); }
여