JS 객체 지향의 캡슐화 및 상속을 정리해 봅시다.
1. 포장
JS에는 캡슐화를위한 많은 구현 방법이 있으며, 일반적으로 사용되는 몇 가지 방법이 있습니다.
1.1 원래 패턴 생성 객체
멤버를 객체에 직접 쓰고 기능으로 반환하십시오. 단점 : 그것이 패턴의 예임을 알기가 어렵습니다.
암호:
코드 사본은 다음과 같습니다.
함수 stu (이름, 점수) {
반품 {
이름 : 이름,
점수 : 점수
}
}
var stu1 = stu ( "Zhang San", 80);
var stu2 = stu ( "li si", 90);
Console.log (stu1.name); // Zhang San
1.2 구성 패턴 객체를 생성합니다
JS는 생성자를 사용하여 객체를 생성하기위한 패턴을 제공하는 데 도움이됩니다. 소위 "생성자"는 실제로 일반적인 기능이지만이 변수는 내부적으로 사용됩니다. 새 키워드가 생성자의 인스턴스를 생성하는 데 사용되면이 변수는 인스턴스 객체에 바인딩됩니다.
코드를 직접 업로드하십시오.
코드 사본은 다음과 같습니다.
함수 stu (이름, 점수) {
this.name = 이름,
this.score = score
}
var stu1 = new stu ( "Zhang San", 80);
var stu2 = new stu ( "li si", 90);
console.log (stu1.name + "/" + stu2.score); // Zhang San90
console.log ((stu1.constructor == stu) + "/" + (stu2.constructor == stu)); // 진실
console.log ((stu1 stu) + "/" + (stu2 stu)); // 진실
js 생성자가 객체를 생성하고 클래스가 객체를 생성하는 객체를 생성하는 것을 보는 것은 어렵지 않습니다. 둘 다 템플릿을 사용하여 객체 멤버를 정의하여 새로운 키워드를 통해 인스턴스화합니다.
C# 코드를 사용하여 동일한 STU 객체를 생성하십시오
코드 사본은 다음과 같습니다.
클래스 스튜
{
공개 문자열 이름;
공개 이중 점수;
}
좋아, 여기에 기본 객체가 있습니다. 이제 우리는 모든 객체가 공통적 인 방법이 필요하며,이 방법을 한 번만 만들었습니다. (새로운 개체로 반복적으로 생성하지 마십시오) 어떻게해야합니까? C#에서 우리는 정적 멤버를 사용할 수 있다는 것을 모두 알고 있습니다. 그래서 JS에서 어떻게해야합니까?
1.3 프로토 타입 모드
JS에서, 각 생성자는 프로토 타입 속성을 가지며,이 객체의 모든 속성과 방법은 생성자 인스턴스에 의해 상속됩니다. 그런 다음 프로토 타입에 멤버를 직접 추가하는 것은 C#의 정적 멤버를 선언하는 것과 같습니다.
암호:
코드 사본은 다음과 같습니다.
함수 stu (이름, 점수) {
this.name = 이름,
this.score = score
}
stu.prototype.type = '학생';
stu.prototype.log = function (s) {
Console.log (들);
}
var stu1 = new stu ( "Zhang San", 80);
var stu2 = new stu ( "li si", 90);
console.log (stu1.type + "/" + stu2.type); // 학생
stu1.log ( 'hello'); // 안녕하세요
console.log (stu1.log == stu2.log); // 진실
캡슐화에 관한 것입니다. JS에서 상속이 어떻게 구현되는지 살펴 보겠습니다.
2. 상속
2.1 생성자 결합
자식 기능에서 직접 메소드를 호출하거나 적용하여 부모 객체의 생성자를 자식 객체에 바인딩합니다.
코드 사본은 다음과 같습니다.
함수 stu (이름, 점수) {
grade.Apply (이, 인수);
// grade.call(This, Arguments);
this.name = 이름,
this.score = score
}
함수 등급 () {
this.code = "주니어 고등학교";
this.ask = function () {
Console.log ( "안녕하세요 모두");
}
}
var stu1 = new stu ( "Zhang San", 80);
var stu2 = new stu ( "li si", 90);
console.log (stu1.code); // 중학교
stu1.ask (); // 여러분, 안녕하세요
적용은 여기서 두 가지를 수행하고 첫 번째 매개 변수를 등급 생성자 (발신자)에 넣고 등급으로 코드를 실행합니다. STU에서 등급으로 정의 된 멤버를 실행하는 것과 같습니다.
2.2 프로토 타입을 통한 상속
코드를 먼저보십시오
암호:
코드 사본은 다음과 같습니다.
함수 stu (이름, 점수) {
this.name = 이름,
this.score = score
}
함수 등급 () {
this.code = "주니어 고등학교";
}
stu.prototype = new grade ();
stu.prototype.constructor = stu; // 상속 체인 장애를 방지하고 선언을 수동으로 재설정합니다
var stu1 = new stu ( "Zhang San", 80);
var stu2 = new stu ( "li si", 90);
Console.log (stu.prototype.constructor); // 자체 생성자
console.log (stu1.code); // 중학교
앞에서 언급했듯이 프로토 타입은 C#의 정적 멤버와 동일하므로 상속을 달성하기 위해 부모 클래스의 모든 구성원을 자체 정적 멤버로 전환합니다.
프로토 타입을 통한 상속의 단점이 있습니다.
2.3 상속을 복사하십시오
상속 재산을 실현하기 위해 부모 객체의 모든 속성과 방법을 자식 객체에 복사하십시오.
암호:
코드 사본은 다음과 같습니다.
함수 stu (이름, 점수) {
this.name = 이름,
this.score = score
}
함수 등급 () {}
grade.prototype.code = "중학교";
}
// 함수 캡슐화
함수 확장 (c, p) {
var p = p.prototype;
var c = C. prototype;
for (var i in p) {
C [i] = p [i];
}
}
확장 (stu, grade);
var stu1 = new stu ( "Zhang San", 80);
var stu2 = new stu ( "li si", 90);
stu1.code = '고등학교';
console.log (stu1.code); // 고등학교
Console.log (stu2.code); // 중학교
Console.log (stu.prototype.constructor);
Console.log (grade.prototype.constructor)
이것이 제가 JS 객체 지향 조직에 대해 쓴 것입니다. 이것은 정적이 아닙니다. 그것을 사용할 때, 당신의 필요에 따라 변경하십시오. 아주 잘 진행되는 말이 있습니다. 올바른 것이 최고입니다.
이것은 캡슐화 및 상속에 대해서만 분석됩니다. 우리는 친구들이 JavaScript 객체 지향 프로그래밍에 대해 더 깊이 이해할 수 있도록 앞으로 다른 기사를 할 것입니다. 물론, 그것은 모두 개인적인 이해입니다. 누락이 있으면 저에게 연락하십시오.