JavaScript에서 액세스 할 수있는 모든 인스턴스에 의해 액세스 할 수있는 속성은 많은 경우 프로토 타입의 속성을 다시 할당해야합니다. 지식의 일부.
기본 유형 정의는 다음과 같습니다.
다음과 같이 코드 코드를 복사하십시오.
기능인 () {}
person.prototype = {
생성자 : 사람,
이름 : "사람",
나이 : 100,
친구 : [A ","B "] ,,,
getName : function () {
이 this.name;
}
};
두 사람의 예를 정의하고 인스턴스에서 이름 속성을 수정합니다 (속성은 프로토 타입에 정의되어 있음), 테스트 코드는 다음과 같습니다.
다음과 같이 코드 코드를 복사하십시오.
var p1 = 새로운 사람 ();
var p2 = 새로운 사람 ();
document.write (p1.name+"<br/>");
document.write (p2.name+"<br/>");
p1.name = "p1";
document.write (p1.name+"<br/>");
document.write (p2.name+"<br/>");
document.write (p1.hasownproperty ( "name")+"<br/>");
document.write (p2.hasownproperty ( "name")+"<br/>");
document.write (object.keys (p1)+"<br/>");
document.write (object.keys (p2)+"<br/>");
document.write (object.get.getOrpropertyNames (person.prototype)+"<br/>");
document.write (person.prototype.name+"<br/>");
테스트 후 P1.Name = "P1"은 이름 값을 수정하지 않지만 인스턴스 P1에서 이름 속성을 추가합니다. 후자의 Object.keys (P1)는 P1 인스턴스에 P2가없는 추가 이름 속성이 있음을 알 수 있습니다. JS의 모든 전송은 값 전송이기 때문에이 값은이 참조 객체를 수정하는 것이 아니라 원래의 참조 관계를 전환하는 것을 의미합니다 이 문제를 설명하기위한 코드.
다음과 같이 코드 코드를 복사하십시오.
var obj = new Object ();
obj.name = "obj";
함수 changeobj (o) {
o.name = "변경";
o = 새 개체 ();
o.name = "Newobj";
}
changeobj (obj);
document.write (obj.name);
ChangeObj 메소드에서 o = new Object ()는 매개 변수 O의 값을 수정하지 않지만 원래 참조 관계를 차단하므로 결과는 NewOBJ가 아니지만 변경되었지만 변경되었습니다.
Friends 속성을 프로토 타입으로 수정하려면 첫 번째 예제는 참조 유형입니다
다음과 같이 코드 코드를 복사하십시오.
p1.friends.push ( "c");
document.write (p1.friends+"<br/>");
document.write (p2.Friends+"<br/>");
p1.friends = [ "x", "y", "z"];
document.write (p1.friends+"<br/>");
document.write (p2.Friends+"<br/>");
document.write (p1.hasownproperty ( "friends")+"<br/>");
document.write (p2.hasownproperty ( "friends")+"<br/>")는 프로토 타입에 속합니다.
document.write (object.keys (p1)+"<br/>");
document.write (object.keys (p2)+"<br/>");
document.write (object.get.getOrpropertyNames (person.prototype)+"<br/>");
document.write (person.prototype.friends+"<br/>");
테스트 결과는 기본적으로 동일한 숫자가 수정되면 원래 인용문이 차단되고 인스턴스에 대한 새 속성을 생성하고 프로토 타입에서 동일한 이름의 속성을 다룹니다.
이 두 가지 테스트 결과를 기반으로 프로토 타입의 값 유형 속성을 인스턴스에서 직접 수정할 수없는 것으로 나타났습니다 (물론이 값 유형은 프로토 타입에서 정의해서는 안됩니다.