[말도 안 되는 소리]
면접 때 매니저님에게 받은 질문 중 하나가 제가 오랫동안 고민하고 답을 하지 못해서 깊은 인상을 받았습니다. 문제는 JavaScript가 상속을 어떻게 구현하는가입니다. 개발 과정에서 객체 지향이 사용되었기 때문에 상속도 가장 기본적인 부분입니다. JS 작업을 시작한 지 거의 2년이 지났지만 아직 이 기본 수준도 통과하지 못한 것 같습니다. 강도가 향상됩니다! ! ! 다시한번 정보를 확인하고 드디어 깊이 이해하게 되었습니다. 말도 안되는 코딩 액션...
[Text]
C#에서는 전통적인 클래스 상속이 매우 간단하다는 것은 다들 아시겠지만, JS에서는 프로토타입 상속을 사용하기 때문에 상대적으로 복잡합니다. 구현합니다.
//People 객체 정의
var People = function () { };
People.prototype = {
키: 175,
걷기: function () {
alert("사람들이 걷고 있습니다..."); }
}
//Me 객체 정의
var Me = function () { }
//Me의 프로토타입 속성을 People 객체로 설정
Me.prototype = new People; ();
//생성된 Me 객체의 참조를 Me로 다시 지정
Me.prototype.constructor = Me
//Height 속성 수정
Me.prototype.SetHeight = function ( v) {
Me.prototype.Height = v;
}
//New Stop 액션
Me.prototype.Stop = function () {
alert("저는 Stop입니다. ");
}
var m = new Me();
//결과는 사람의 키가 175cm입니다.
alert("사람의 키는 "m.Height "cm입니다.");
m.SetHeight(185 );
//결과는 185cm입니다.
alert("I'm "m.Height"cm."); 결과는 사람들이 걷고 있습니다...
m.Walk();
//결과는 I'm Stop입니다.
m.Stop()
var y = new Me();
//결과는 키가 185cm입니다.
alert("You're " y.Height "cm height.")
위에서 볼 수 있듯이 예를 들어, Me 객체는 People 객체를 상속하고 People 프로토타입에 액세스할 수 있습니다. Me의 속성과 작업은 Me 자신의 작업과 속성도 가질 수 있습니다. 위의 예에서는 y=new Me()가 인스턴스화되었지만 해당 Height 속성이 표시되면 원래 175가 아니라 m 인스턴스에 의해 수정된 185라는 점에 유의하는 것이 중요합니다. 새로운 People 구현은 생성되지 않지만 해당 프로토타입의 인스턴스는 재사용됩니다. 따라서 위의 예에서 모든 Me 개체는 동일한 Height 속성을 공유합니다. 상속을 사용할 때는 특히 주의해야 합니다.