JavaScript에서 객체는 "속성이 기본 값, 객체 또는 함수를 포함 할 수있는 변하지 않은 속성 모음"으로 정의됩니다. Layman의 용어로는 값을 데이터 또는 함수 일 수있는 이름 값 쌍 세트로 객체를 이해할 수 있습니다.
일반적으로 사용자 정의 객체를 만드는 방법에는 두 가지가 있습니다. 첫 번째는 객체의 인스턴스를 작성한 다음 다음과 같은 속성과 메소드를 추가하는 것입니다.
var person = new Object (); person.name = "Scott"; person.age = 24; person.sayname = function () {alert (person.name); }두 번째 방법은 객체 문자 그럴 방법입니다. 일반적 으로이 방법을 사용하여 객체를 작성하는 것이 좋습니다.
var person = {name : "scott", 나이 : 24, sayname : function () {alert (this.name); }}속성 유형
JavaScript에 정의 된 두 가지 속성이 있습니다 : 데이터 속성 및 액세서 속성. 데이터 속성은 일반적으로 데이터 값을 저장하는 데 사용되는 반면 액세서 속성은 일반적으로 GET/SET 작업을 수행하며 데이터 값을 직접 저장할 수 없습니다. ES5에서는 속성의 다양한 특징을 설명하기 위해 속성을 정의합니다. JavaScript에서는이 기능에 직접 액세스 할 수 없으므로 [[Enumerable]]와 같은 두 쌍의 사각형 괄호로 넣습니다.
• 데이터 속성
데이터 속성은 주로 그들의 행동을 설명합니다.
1. [[configurable]] : 기본값은 참입니다. 속성을 삭제하여 속성을 재정의하여 속성 특성을 수정할 수 있는지 또는 속성을 액세서 속성으로 수정할 수 있는지 여부를 나타냅니다.
2. [[열거 가능]] : 기본값은 참입니다. 속성을 For-In Loop을 통해 반환 할 수 있는지 여부를 나타냅니다.
3. [[writable]] : 기본값은 사실입니다. 속성 값을 수정할 수 있는지 여부를 나타냅니다.
4. [[value]] : 기본값은 정의되지 않았습니다. 속성을 포함하는 데이터 값을 나타냅니다. 이 위치에서 읽기 및 쓰기 속성 값이 수행됩니다.
Person Object에서 직접 정의 된 속성의 경우, [[configurable]], [[enumerable]] 및 [[writable]] 속성은 기본적으로 true로 설정되고 [[value]] 속성은 특정 값으로 설정됩니다. 속성의 기본 속성을 수정하려면 ES5에서 제공하는 Object.DefineProperty () 메소드를 사용할 수 있습니다. 이 메소드는 세 가지 매개 변수를 수신합니다. 속성이있는 객체, 속성 이름 및 설명자 객체. 디스크립터 객체는 위의 네 가지 특성 중 하나 이상만 포함 할 수 있습니다. 예는 다음과 같습니다.
var person = {name : "scott"} object.defineProperty (person, "name", {writable : false;}) console.log (person.name); // "Scott"person.name = "Evan"; Console.log (person.name); // "Scott"개인 객체 이름 속성의 쓰기 가능한 속성을 False로 설정하십시오. 이 속성의 값은 변하지 않으므로이 속성의 사본 작업은 직접 무시됩니다.
var person = {name : "scott"} object.defineProperty (person, "name", {configurable : false;}) console.log (person.name); // "Scott"Delete Person.name; Console.log (person.name); // "Scott"이름 속성으로 구성 가능한 속성 값이 False로 설정되면 객체에서 속성을 삭제할 수 없음을 의미합니다. 그러나 속성이 구성 불가능한 것으로 정의되면 다시 구성 할 수없는 것으로 다시 전환 할 수는 없습니다. 현재 쓰기 가능 이외의 다른 기능을 수정하면 오류가 발생합니다.
var person = {name : "scott"} object.defineProperty (person, "name", {configurable : false;}) object.defineProperty (person, "name", {configurable; // 오류가 여기에 버려집니다})즉, 구성 가능한 기능을 False로 수정 한 후 다른 기능을 수정할 때 제한이 있습니다.
• 액세서 특성
액세서 속성에는 데이터 값이 포함되어 있지 않습니다. 여기에는 한 쌍의 게터 및 세터 기능이 포함되어 있습니다. 액세서 속성을 읽으면 getter 함수가 호출되고 유효한 값이 반환됩니다. 액세서 속성이 작성되면 세터 기능이 호출되고 새 값이 전달되고 Setter 함수는 데이터 처리를 담당합니다. 이 속성에는 네 가지 특성이 있습니다.
1. [[configurable]] : 기본값은 참입니다. 속성을 삭제하여 속성을 재정의하여 속성 특성을 수정할 수 있는지 또는 속성을 액세서 속성으로 수정할 수 있는지 여부를 나타냅니다.
2. [[열거 가능]] : 기본값은 참입니다. 속성을 For-In Loop을 통해 반환 할 수 있는지 여부를 나타냅니다.
3. [[get] : 속성을 읽을 때 호출 된 함수는 기본값이 정의되지 않았습니다.
4. [[set]] : 속성을 작성할 때 호출 된 함수는 기본값이 정의되지 않습니다.
액세서 속성을 직접 정의 할 수 없으므로 Object.DefineProperty () 함수를 통해 정의해야합니다.
var person = {_name : "scott", _age : 24, _tel : 86247}; // 이름 속성은 읽기 전용 객체입니다 .defineProperty (person, "name", {get : function () {return this._name;}}); // Age 속성은 쓰기 전용 Object.DefineProperty (person, "age", {set : function (p) {this._age = p;}}); // tel 속성은 읽기 전용 객체입니다 .DefineProperty (person, "tel", get : get : function () {return this._tel;}, set : function (p) {this._tel = p;}}); Console.log (person.name); // "Scott"person.name = "Evan"; Console.log (person.name); // "scott", 이름 속성의 수정은 invalid.console.log (person.age)입니다. // 정의되지 않은, 읽을 수없는 속성 사람 .age = 25; Console.log (person._age); // 25, console.log (person.tel); // "86247", 읽을 수있는 속성 person.tel = "13975"; Console.log (person.tel); // "13975", 수정을 할 수 있습니다속성의 밑줄은 객체 메소드를 통해서만 액세스 할 수있는 속성을 나타냅니다. 우리는 person.name을 사용하면 실제로 이름 속성의 getter 함수를 호출하고 person.name에 값을 할당하면 이름 속성의 세터 함수를 호출하여 속성과 액세서의 관계가 매우 명확합니다.
여러 속성을 정의합니다
실제로 ES5는 객체, 즉 Object.DefineProperties ()에 대한 여러 속성을 정의하는 메소드를 제공합니다. 이 함수는 속성이있는 객체와 수정 해야하는 속성으로 구성된 객체와 디스크립터 객체로 구성된 두 가지 매개 변수를 수신합니다. 예를 들어, 위의 예제를 수정하여 다음과 같이 여러 속성을 한 번에 정의하십시오.
var person = {_name : "scott", _age : 24, _tel : 86247}; object.defineProperties (person, {name : {get : get : function () {return this._name;}}, age : {set : function (p) {this._age = p;}}, tel : {get : {return this._tel;}, set : function (p) {this._tel = p;}}});속성을 읽으십시오
ES5는 객체를 제공합니다. GetOwnPropertyDescriptter () 메소드를 제공하여 주어진 속성에 대한 디스크립터를 가져옵니다. 이 메소드는 두 개의 매개 변수를 수신합니다. 속성이있는 객체와 설명자의 속성 이름을 읽을 수 있습니다. 결과는 객체를 반환합니다. 액세서 속성 인 경우, 반환 된 객체에는 구성 가능, 열거 가능, Get and Set; 데이터 속성 인 경우 반환 된 객체의 속성에는 구성 가능, 열거 가능, 쓰기 가능 및 값이 포함됩니다. 위의 예에서는 다음을 사용하십시오.
var person = {_name : "scott", _age : 24, _tel : 86247}; object.defineProperties (person, {name : {get : get : function () {return this._name;}}, age : {set : function (p) {this._age = p;}}, tel : {get : {return this._tel;}, set : function (p) {this._tel = p;}}}); var specter = object.getOwnPropertyDescripter (Person, "Tel"); console.log (descripter.value); // 정의되지 않은 console.log (descripter.enumerable); // false console.log (typeof descriptioner.get); //"기능"위의 코드는 Person Object의 Tel 속성을 얻습니다. 액세서 속성이기 때문에 그 값은 정의되지 않으며 열거 가능한 것은 거짓이며, get은 getter 기능에 대한 포인터입니다.
위의 기사에서는 JavaScript 데이터 속성에 대해 간략하게 설명하고 액세서리 속성은 내가 공유 한 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.