객체 생성
•객체 직접수량
var o = { foo : "bar" }
•건축자
var o = new Object();
•프로토타입 상속
var p = Object.create(o);
클래스 상속
자바스크립트 객체에는 고유한 속성과 상속된 속성이 있습니다.
•객체 o의 속성 x를 쿼리할 때 먼저 o에서 속성 x를 검색합니다. 찾을 수 없으면 x 또는 프로토타입이 null인 객체가 발견될 때까지 o의 프로토타입 객체에서 x 속성을 검색합니다. >
•객체 o의 x 속성에 값을 할당할 때 o가 이미 자신의 x 속성을 가지고 있다면 x의 값을 변경합니다. o에 속성 x가 존재하지 않으면 o에 x 속성을 생성하고 할당합니다. 값•즉, 프로토타입 체인은 쿼리할 때만 작동합니다.
var O = { x : 1 }; function P() { this.y = 2; } P.prototype = O; var t = new P(); console.log(t); console.log('x' in t);//true console.log(t.hasOwnProperty('x'));//false
개체 속성
•객체 속성 트래버스
for..in을 사용하여 객체의 속성을 반복할 수 있습니다
따라서 hasOwnProperty를 사용하면 그것이 객체의 자체 속성인지 여부를 확인할 수 있습니다.
•객체 속성의 특징
Object.getOwnPropertyDescriptor()를 사용하여 객체의 특정 속성에 대한 설명자를 가져옵니다
예를 들어
var o = { foo : 'bar' } Object.defineProperty(o, "foo", { writable : false }); o.foo = 'world'; console.log(o.foo);//仍然输出bar
예를 들어
Array의 길이와 같은 속성의 열거 가능 여부가 false이므로
for (p in Array) { console.log(p); }
구성 가능성(configurable)은 수정 가능한 속성의 구성 가능성과 열거 가능성을 나타냅니다
이러한 구성 속성은 Object.defineProperties를 사용하여 정의할 수 있습니다.
Object.defineProperty(o, "foo", { 쓰기 가능 : false });
Set은 객체 속성을 설정하는 방법을 나타냅니다
var book = { _year: 2004, edition: 1 }; Object.defineProperty(book, "year", { get: function () { console.log('get year'); return this._year; }, set: function (newValue) { console.log('set year'); if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } } }); book.year = 2005;//控制台输出‘set year' console.log(book.year);//控制台输出‘get year'和year的值
객체 메소드
toString은 객체를 문자열로 변환합니다. 기본 변환은 [object Object]와 같으므로 json 형식으로 변환해야 하는 경우 JSON.stringify를 사용할 수 있습니다valueOf는 객체를 다른 유형으로 변환해야 할 때 사용됩니다. 다시 말하지만 기본 변환에 대해서는 할 말이 많지 않습니다.
실행 개체
function bar(o) { var f = function() { return "Hello World!"; } o.__proto__ = f.__proto__; f.__proto__ = o; return f; } var o = { x: 5 }; var foo = bar(o); console.log(foo()); console.log(foo.x); console.log(typeof foo);//function