객체 생성:
함수 객체가 생성되면 Function 생성자에 의해 생성된 함수 객체는 다음과 유사한 코드를 실행합니다.
this.prototype={constructor:this};
함수 F
F가 새 메소드를 사용하여 객체를 생성할 때 객체의 생성자는 이 F.prototype.constructor로 설정된다고 가정합니다.
함수가 객체를 생성하기 전에 함수의 프로토타입을 수정하면 영향을 받습니다. 생성된 객체의 생성자 속성
예:
function F(){};
F.prototype={constructor:'1111'};
var o=new F( );//o.constructor== ='1111' true
상속의 원리:
JavaScript의 상속은 함수의 각 인스턴스가 데이터를 공유하는 메커니즘입니다. 생성자의 프로토타입 속성에 정의됩니다. 클래스가 다른 클래스를 상속하는 경우 상위 함수 인스턴스를 하위 함수의 프로토타입 속성에 할당해야 합니다. 그리고 새로운 인스턴스 객체가 생성될 때마다 객체의 전용 속성인 __proto__가 생성자의 프로토타입에 자동으로 연결됩니다.
instanceof는 인스턴스 객체의 프라이빗 프로토타입 속성 체인을 조회하여 지정된 객체의 인스턴스인지 확인하는 것입니다.
구체적인 예:
//instanceof Implements
function Myinstanceof(obj ,type)
{
var proto=obj.__proto__;
while(proto)
{
if(proto ===type.prototype)break;
proto=proto.__proto__;
}
return proto!=null;
}
function View(){}
function TreeView(){}
TreeView.prototype= new View();//TreeView.prototype.__proto__=TreeView.prototype 자동 완성
TreeView.prototype.constructor=TreeView;//Correction 생성자
var view=new TreeView() ;//view.__proto__= TreeView.prototype은 자동으로 완료됩니다.
alert(view instanceof View); //view.__proto__.__proto__가 발견되면 true가 발견됩니다.
alert(view instanceof TreeView가 발견됩니다.); view.__proto__가 발견된 경우
alert(Myinstanceof(view,View)); //true
alert(Myinstanceof(view,TreeView)) //true
위의 사용자 정의된 Myinstanceof는 instanceof의 함수입니다. IE 커널 인스턴스 저장소 프로토타입은 __proto__가 아니므로 다른 브라우저에서는 문제가 없을 것입니다