의견에 대한 설명은 매우 상세하므로 여기서는 말도 안되는 말을하지 않고 코드를 입력합니다.
<script type = "text/javaScript"> // ecma-262 객체를 다음과 같이 정의합니다. "속성에 기본 값, 개체 또는 함수를 포함 할 수있는 변호사 속성 모음"// 객체를 이해하는 가장 쉬운 방법은 객체의 인스턴스를 생성하고 var person = new Object ()에 속성 및 메소드를 추가하는 것입니다. person.name = "xulei"; person.age = "23"; person.job = "프론트 엔드 엔지니어"; person.sayname = function () {alert (this.name); } // var person = {name : "xulei", age : 23, job : "프론트 엔드 엔지니어링", sayname : function () {alert (this.name)}} // 1을 쓸 수도 있습니다. 속성 유형 : 데이터 속성 및 액세스 속성 // 1. 데이터 속성, 동작을 설명하는 4 가지 특성 // [configurable] : 속성을 삭제할 수 있는지, 속성을 수정할 수 있는지, 속성을 수정할 수 있는지, 속성을 액세서 속성으로 수정할 수 있는지 여부를 나타냅니다. 기본값은 true // [enumerable] : hate value가 true // [writedable)인지 여부를 나타냅니다. 수정 된 기본값은 true // [value] :이 속성의 데이터 값을 포함합니다. 기본값은 정의되지 않은 var person = {name : "xulei"} // 사람 객체가 여기에 생성되고, 값 값은 "xulei"// 속성의 기본 속성을 수정하기 위해 ecmascript5의 객체를 수정합니다. {} object.defineProperty (Peron, "name", {Writable : false, // 속성은 수정 될 수 없습니다 : "Xu Lei-Xulei"}); Alert (peron.name); // xu lei-xulei peron.name = "Xu Lei"; Alert (peron.name); // xu lei-xulei // 위의 작업은 비 스트릭 모드에서 무시됩니다. 예외가 엄격한 모드로 던져지면 속성이 구성 불가능한 것으로 정의되면 다시 구성 가능한 것으로 다시 전환 할 수 없습니다. // 대부분의 경우 Object.DefineProperty () 메소드에서 제공하는 이러한 고급 기능을 활용할 필요가 없습니다. 그러나 JavaScript를 이해하는 데 매우 유용합니다. // 독자는 IE8 에서이 방법을 사용하지 말 것을 권장합니다. // 2. 속성에 액세스하는 4 가지 특성 // [configurable] : 속성을 삭제하여 속성의 특성을 수정할 수 있는지, 속성의 특성을 수정할 수 있는지, 또는 속성을 액세서 속성으로 수정할 수 있는지, 기본값은 true // [enumerable] : [enumerable] : report value가 true // get. Undefined // [set] : 속성을 작성할 때 호출 된 함수의 기본값은 정의되지 않은 var book = {_year : 2004, edition : 1} object.defineProperty (book, "year", {get : function () {return this._year;}, set : function (value) {value> 2004) {_year = value; this.edition = value; }}); book.year = 2005; Alert (Book.edition); // 2 // 객체 생성 // 1. 생성자를 기능인으로 취급 (이름, 연령, 직업) {this.name = 이름; this.age = age; this.job = job; this.sayname = function () {alert (this.name); }} // var person = new Person ( "Xulei", 23, "Software"); person.sayname (); // 개인 ( "Xulei2", 23, "job2"); // Window.SayName (); // 다른 객체의 범위에서 var를 호출합니다. o = new Object (); person.call (o, "xulei3", 23, "job3"); O.SayName (); </스크립트>또 다른 단락을 가지고합시다 :
<script type = "text/javaScript"> // 1. 프로토 타입 객체를 이해하십시오 // 2. 프로토 타입 및 연산자 // 3. 더 간단한 프로토 타입 구문 // 4. 프로토 타입의 역학 // 5. 기본 객체 프로토 타입 // 6. 프로토 타입 객체의 문제 // 1. 함수가 생성 될 때마다 특정 규칙 세트를 기반으로 함수에 대한 프로토 타입 속성이 생성됩니다. 이 속성은 // 기능 //의 프로토 타입 객체를 기본적으로 지적하면, 모든 프로토 타입 객체는 제작자 (생성자) 속성을 자동으로 얻습니다. 여기에는 프로토 타입 속성이 위치한 기능에 대한 포인터가 포함되어 있습니다. 다른 방법은 객체에서 상속됩니다 .// 새 인스턴스를 생성하기위한 호출에 따라 인스턴스에는 생성자의 프로토 타입 개체를 가리키는 포인터 (내부 속성)가 포함되어 있습니다 .//in firefox, safari 및 Chrome var p1 = new Person (); Alert (person.prototype.isprototypof (p1)) alert (object.getPrototyp (p1) == person.prototype) // 프로토 타입에 저장된 값은 객체 인스턴스를 통해 액세스 할 수 있지만 프로토 타입의 값은 객체 인스턴스를 통해 다시 작성할 수 없습니다. 우리가 인스턴스에 //를 추가하고 속성의 이름이 프로토 타입의 인스턴스와 동일하면 인스턴스의 속성을 만들고 속성은 프로토 타입의 속성을 차단합니다. EG : 함수 person () {} person.prototype.name = "Amber"; person.prototype.age = 23; person.prototype.job = "소프트웨어 엔지니어"; person.prototype.sayname = function () {alert (this.name)} var person1 = new person (); var person2 = 새로운 사람 (); person1.name = "amber.xu"; ALERT (person1.name); // amber.xu -from 인스턴스 Alert (person2.name); // amber -from 프로토 타입 delete person1.name; ALERT (person1.name); // 앰버 -프로토 타입에서 // hasownProperty () 메소드를 사용하여 인스턴스 또는 프로토 타입에 속성이 있는지 여부를 감지합니다. 이 메소드 (Object에서 상속) // true function person () {} person.prototype.name = "Amber"를 반환합니다. person.prototype.age = 23; person.prototype.job = "소프트웨어 엔지니어"; person.prototype.sayname = function () {alert (this.name)} var person1 = new person (); var person2 = 새로운 사람 (); Alert (person1.HasOwnProperty ( "name")); // 인스턴스 alert에서 false (person.2.hasownProperty ( "name")); // 인스턴스의 false1.name = "amber.xu"; 경고 (person1.name); Alert (person1.HasOwnProperty ( "name")); // 인스턴스 삭제에서 true person1.name; 경고 (person1.name); Alert (person1.HasOwnProperty ( "name")); // 프로토 타입에서 false // 2. 프로토 타입과 연산자 // 사용하는 두 가지 방법이 있습니다. 하나는 별도로 그리고 인간에 사용됩니다. 단독으로 사용될 때, IN 연산자는 주어진 속성에 액세스 할 수있을 때 true를 반환합니다. // 속성이 프로토 타입에서 나온지 또는 인스턴스 함수 person () {} person.prototype.name = "Amber"; person.prototype.age = 23; person.prototype.job = "소프트웨어 엔지니어"; person.prototype.sayname = function () {alert (this.name)} var person1 = new person (); var person2 = 새로운 사람 (); Alert ( "Name"In Person1)); // 프로토 타입 알림 (Person2의 "이름"); // 프로토 타입 알림 (Person1의 "높이")에서 true (false //이 방법으로는 함수를 캡슐화 할 수 있습니다 (주어진 속성이 주어진 객체의 프로토 타입이든) 함수 (대상, 이름) {name! indame) {hasownproperty (name)); } alert("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Returns all 프로토 타입 및 인스턴스 속성을 포함하여 객체를 통해 액세스 할 수있는 열거 가능한 속성 // 프로토 타입에서 열거 할 수없는 속성을 차단하는 인스턴스 속성 (거짓으로 열거 할 수있는 속성)은 IE의 모든 버전으로 반환됩니다. o = {toString : fort () {var prop in o) {alert ( "found"); 객체를 인수로 받아들이십시오. // 모든 열거 가능한 속성 기능을 포함하는 문자열 배열 기능 person.prototype.age = 23; person.prototype.job = "소프트웨어 엔지니어"; person.prototype.sayname = function () {alert (this.name)} var person1 = new person (); var person2 = 새로운 사람 (); var keys = object.keys (person.prototype); 경고 (키) person1.name = "amber.xu"; person1.age = 23; var keys = object.keys (person1); 경고 (키) 알리다("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- "Amber", Age : 23, "Software", Sayname : function () {alert (this.name)}} // 생성자 속성은 더 이상 사람의 기능을 가리키지 않지만, 올바른 결과는 인스턴스를 통해 반환 될 수 있습니다 person) // true alert (객체의 친구 인스턴스) // true alert (friend.constructor == person); // false alert (friend.constructor == object); // true // 생성자가 당신에게 정말로 중요하다면, 아래 기능자 () {} person.prototype = {person, namber ","hap " sayName : function () {alert (this.name)}} var friend = new person (); 경고 ( "수동으로 설정 constructor----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // 객체를 사용할 수 있습니다. DefineProperty (Person.protopty, "생성자", {false : value : person}); 인스턴스와 프로토 타입, 인스턴스와 프로토 타입의 연결은 사본이 아닌 포인터 일뿐입니다. // sayhi () 메소드를 호출 할 때 먼저 인스턴스에서 sayhi라는 메소드를 검색하고 프로토 타입을 찾을 수없는 경우 프로토 타입을 검색합니다. // 그러나 전체 프로토 타입 객체를 다시 작성하면 상황이 다릅니다. // 생성자를 호출 할 때 원래 프로토 타입에 대한 프로토 타입 포인터가 인스턴스에 추가되고 프로토 타입을 다른 객체로 수정하는 것이 생성자와 원래 프로토 타입 간의 연결을 차단하는 것과 같습니다. // 기억하십시오 : 인스턴스의 포인터는 생성자가 아닌 프로토 타입 만 가리 킵니다. EG : 함수 a () {} var a1 = new a (); A.prototype = {생성자 : A, 이름 : "Amber", Age : 23, Job : "Software", SayName : function () {alert (this.name)}} alert("ERROR------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Even all 기본 참조 유형은이 패턴을 사용하여 생성됩니다. // 생성자의 프로토 타입에 정의 된 메소드 : Alert (typeof array.prototyp.sort); // function alert (typeof string.prototyp.substring); // 기능을 기본 대상의 프로토 타입에 대한 참조를 얻을 수있을뿐만 아니라 // 유형을 추가 할 수 있습니다. String.prototype.startSwith = function (text) {return this.indexof (text) == 0; }; var msg = "hello"; 경고 (msg.startswith ( "h")); // 우리는 이것을하는 것이 좋습니다. Alert ( "프로토 타입 객체의 프로토 타입 문제"); // 6. 프로토 타입 예제 함수 ques () ques.prototype = {생성자 : ques, 이름 : "앰버", 나이 : 23, 직업 : "it", 친구 : [ "zhang san", "li si"], // 참조 유형 sayname : function () {alert (this.name)}}; var q1 = 새로운 ques (); var q2 = 새로운 ques (); Q1.Friends.push ( "Wang Wu"); Alert (q1.friends); // Alert (Q2.Friends); // Alert (Q1.Friends === Q2.Friends); // 모든 사람이 문제를 보았다고 생각합니다. Q1과 Q2의 두 인스턴스를 만들었을 때, Q1의 "Wang Wu"를 "친구"에 추가했을 때, Q2의 "Friends"는 또한 3 개의 "Wang San, Li Si 및 Wang Wu //가 있었기 때문에 배열이 q1에 존재하기 때문입니다. 따라서 위의 결과가 Q1에 나타나지 않았습니다. // 우리가 그 이유를 알 수 있습니다.이 기사는 여기서 끝납니다. 우리는 향후 자바 스크립트의 객체 지향 프로그래밍에 대해 계속 논의 할 것입니다. 모두가 좋아할 수 있기를 바랍니다.