자 바스 크 립 트 의 패키지 와 계승 특성 을 간단하게 이해 합 니 다.
var Book = function(name){
if(this.check(name)){
console.log("error");
throw new Error("name null");
}
this.name = name;
}
Book.prototype = {
check:function(name){
if(!name){
return true;
}
},
getName:function(){
return this.name;
}
}
var book = new Book(" ");
//output:
console.log(book.name,book.getName());
이 예 는 포 털 개방 형의 전형 으로 외부 에서 대상 을 직접 방문 할 수 있 는 속성 과 방법 이다.속성 과 변 수 는 모두 "this" 로 만 들 어 졌 음 을 알 수 있 습 니 다. 2. 명명 규범 으로 사유 변 수 를 구분 합 니 다. 이 방법 은 포 털 개방 형의 최적화 버 전 입 니 다. 사유 변수 나 방법 앞에서 '' 로 구분 할 뿐 프로그래머 가 의도 적 으로 사용 할 경우getName () 의 방법 으로 방법 을 호출 하 는 것 은 막 을 수 없습니다. 변 수 를 진정 으로 숨 기 는 것 이 아 닙 니 다. 3. 패 킷 을 닫 고 진정한 사유 변 수 를 만 듭 니 다. 이 방법 은 js 에서 함수 만 작용 역 의 특성 을 가지 고 구조 함수 의 작용 역 에서 관련 변 수 를 정의 합 니 다. 이런 변 수 는 이 작용 역 의 모든 함수 에 접근 할 수 있 습 니 다.
var Book2 = function(name){
if(check(name)){
console.log("error");
throw new Error("name null");
}
name = name;
function check(name){
if(!name){
return true;
}
}
this.getName = function(){
return name;
}
}
Book2.prototype = {
display:function(){
// name
return "display:"+this.getName();
}
}
var book2 = new Book2(" ");
//output:undefined " " "display: "
console.log(book2.name,book2.getName(),book2.display());
이 예 에서 결 과 를 볼 수 있 습 니 다. name 에 직접 접근 하면 undefined 의 결 과 를 되 돌려 줍 니 다.이 예 와 포 털 대개 형의 차 이 를 볼 수 있 습 니 다. 포 털 대개 형의 변 수 는 'this' 를 사용 하여 만 듭 니 다. 이 예 에서 var 를 사용 하여 만 듭 니 다. check 함수 도 마찬가지 입 니 다. name 과 check 함 수 는 구조 함수 의 역할 영역 에서 만 접근 할 수 있 고 외부 에서 직접 방문 할 수 없습니다.이 방법 은 앞의 두 가지 방법의 문 제 를 해 결 했 지만 어느 정도 폐단 이 있다.포 털 오픈 대상 생 성 모드 에 서 는 모든 방법 이 프로 토 타 입 대상 에 생 성 되 기 때문에 아무리 많은 대상 인 스 턴 스 를 생 성하 더 라 도 메모리 에 한 부 만 존재 합 니 다. 이 방법 을 사용 하면 새로운 대상 을 만 들 때마다 모든 개인 변수 와 방법 에 새로운 복사 본 을 만 들 기 때문에 더 많은 메모리 가 소 모 됩 니 다.
JavaScript 의 계승 Book 기본 클래스:
var Book = function(name){
if(this.check(name)){
console.log("error");
throw new Error("name null");
}
this.name = name;
}
Book.prototype = {
check:function(name){
if(!name){
return true;
}
},
getName:function(){
return this.name;
}
}
계승 방법:
function extend(subClz,superClz){
var F = function(){}
F.prototype = superClz.prototype;
subClz.prototype = new F();
subClz.prototype.constructor = subClz;
subClz.superClass = superClz.prototype;
if(superClz.prototype.constructor == Object.prototype.constructor){
superClz.prototype.constructor = superClz;
}
빈 함수 F 를 브리지 로 사용 하면 부모 클래스 를 직접 예화 할 때 부모 클래스 의 구조 함 수 를 호출 하여 추가 비용 을 가 져 오 는 것 을 피 할 수 있 습 니 다. 또한 부모 클래스 의 구조 함수 에 인자 가 있 을 때 subClass. prototype = new superClass () 를 직접 통과 하고 싶 습 니 다.부류 구조 함수 의 호출 과 원형 체인 의 계승 을 실현 해 서 는 안 된다.
subClz.superClass = superClz.prototype;
if(superClz.prototype.constructor == Object.prototype.constructor){
superClz.prototype.constructor = superClz;
}
이 세 문장 을 추가 하면 하위 클래스 가 부모 클래스 를 계승 하여 Book. call (this, name) 을 쓰 는 것 을 피 할 수 있 습 니 다.Artbook. superClass. constructor. call (this, name) 을 간단하게 쓰 면 이 루어 집 니 다.또한 하위 클래스 에서 부모 클래스 를 다시 쓸 때 부모 클래스 로 호출 할 수 있 습 니 다.
ArtBook.prototype.getName = functiion(){
return ArtBook.superClass.getName.call(this) + "!!!";
}
ArtBook 하위 클래스:
var ArtBook = function(name,price){
ArtBook.superClass.Constructor.call(this,name);
this.price = price;
}
extend(ArtBook,Book);
ArtBook.prototype.getPrice = function(){
return this.price;
}
ArtBook.prototype.getName = function(){
return ArtBook.superClass.getName.call(this)+"!!!";
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.