각 객체에는 상위 객체의 프로토타입(객체를 구성하는 함수)(여기서는 상위 프로토타입 또는 암시적 프로토타입이라고 함)을 가리키는 암시적 속성이 있으며, 그 속성과 메서드를 상속받습니다. , 함수 개체에는 명시적인 프로토타입 참조도 있습니다.] 일반적인 상황에서는 개체의 부모 프로토타입에 액세스할 수 없지만 FunctionName.prototype을 통해 함수 개체의 명시적인 프로토타입에 액세스할 수 있습니다. [FireFox에서는 개체의 부모에 액세스할 수 있습니다. 객체의 __proto__ 속성을 통한 프로토타입]
이 프로토타입 속성 자체는 객체 유형 객체이므로 임의의 속성을 추가할 수 있으며 메서드를 사용하면 인스턴스 객체가 이를 상속받을 수 있습니다.
예: 문자열 유형 객체는 String.prototype입니다. 문자열 유형 객체에 일부 사용자 정의 메소드를 추가하려면 다음과 같이 구현할 수 있습니다(여기에는 클래스와 유사한 VBscript에 트림 메소드를 추가하는 예가 있습니다)
String.prototype.trim=function(){
return this.replace(/^s*|s*$/g,"")
}
// " jiangsk540 ".trim();//return "jiagnsk540"
위 기능을 제공하는 것 외에도 프로토타입은 유사한 인스턴스 객체 그룹이 속성과 메서드를 공유할 수 있는 메커니즘도 제공합니다. 이는 정적 속성 또는 정적 함수와 동일하며, 이를 사용하여 생성된 인스턴스 객체 수에 관계없이 생성자에서 프로토타입에 정의된 속성 및 메소드는 처음부터 끝까지 한 번만 정의됩니다. 모든 인스턴스 객체는 이 속성 또는 메소드의 사용을 공유하지만 C와 동일하지 않거나 JAVA의 정적 속성 또는 정적 함수와 동일한 개념입니다. ]
function Class1(이름){
this.name = 이름;
}
Class1.prototype.show=function(){
alert("name=" this.name)
}
var m1 = new Class1 ("jiangsk540");
var m2 = new Class1("haired lion");
alert(m1.show===m2.show);//참 표시
생성자 프로토타입에 동적으로 추가된 속성이나 메소드는
코드 복사와 같이 이전에 생성된 객체에서 즉시 호출할 수 있습니다. 코드는 다음과 같습니다.
function Class1(name){
this.name = name
}
Class1.prototype.show=function( ){
Alert("name=" this.name);
}
var m1 = new Class1("jiangsk540")
Class1.prototype.say=function(){
Alert("안녕하세요" );
}
m1.say()//호출 성공
/*
참고: 생성자의 프로토타입에 추가된 속성이나 메서드만 생성된 객체에서 사용할 수 있습니다. 즉시 호출하는 것과 같습니다
생성자 프로토타입의 참조를 변경하면 생성된 객체에서 즉시 호출할 수 없습니다
*/
Class1.prototype={newP:"jiangsk540"}
alert( m1.newP) //정의되지 않음