메소드를 사용하여 javascript (1)_javascript 기술의 새로운 연산자를 캡슐화합니다.

WBOY
풀어 주다: 2016-05-16 18:13:31
원래의
1051명이 탐색했습니다.

먼저 예를 살펴보겠습니다.

코드 복사 코드는 다음과 같습니다.

var 클래스 = {
생성 : 함수() {
반환 함수() {
this.initialize.apply(this, 인수)
}
}
}
var A = Class.create( );
A.prototype = {
initialize:function(){
//todo
}
test:"abc"
}
var a = new A( );

이것은 많은 jser에서 클래스를 구성하고 객체를 인스턴스화하는 프로세스입니다. 인스턴스화된 a에는 추가 초기화 방법이 있습니다. 인스턴스화 중에 초기화가 프록시로 사용되면 인스턴스화 후에는 의미가 없으며 때로는 불필요한 문제가 발생합니다. 예를 들어 for...in 문이 a를 순회하면 초기화 메서드도 순회하게 됩니다.
가장 먼저 생각난 것은 이전 블로그 포스팅에 쓴 Class.js를 사용하는 것인데 굉장히 깔끔합니다. 그러나 Class.js의 상속 메커니즘에는 몇 가지 버그가 있습니다. 침입 없이(즉, 프로토타입을 수정하거나 추가 속성을 생성하지 않고) 인터페이스를 구현하는 것은 훨씬 더 어렵습니다. 그래서 new 연산자를 캡슐화하는 방법을 생각하게 되었습니다. 이것의 장점은 프로토타입을 먼저 수정할 수 있고, new를 캡슐화하는 방식으로 상속과 인터페이스를 구현할 수 있고, 추가 속성을 제거할 수 있다는 것입니다.
먼저 new 연산자의 간단한 구현을 구현해 보겠습니다.
코드 복사 코드는 다음과 같습니다.

function New(){//new는 키워드이므로 구별하세요.
var as = [],args = 인수
for(var i=1;ias.push('args[' i ']');
}
nobj = eval("new args[0](" as.join(",") "); ") ;
return nobj;
}
다음 테스트:
function A(n){ this.name = n;}
var a1 = new A('ts');
alert(a1.name);//ts
var a2 = New(A,'tangoboy');
alert(a2.name);//tangoboy
테스트가 성공했습니다. New 메소드는 기본적으로 new 연산자 대신 객체를 인스턴스화할 수 있습니다.
글 시작 부분에 있는 초기화 문제를 해결하는 것은 매우 간단합니다.
function New(){
var as = [],args =
for(var i=1; ;ias.push('args[' i ']')
}
nobj = eval("new args[0](" as.join( ",") " );");
delete nobj.initialize;//인스턴스화된 객체의 메소드 삭제
return nobj;

다음 섹션이 시작됩니다. 새로운 방법을 풍부하게 합니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!