다음 예를 살펴보세요.
var a = 'global' ;
(function () {
alert(a);
var a = 'local';
})(); >
여러분 먼저 이 예시를 보시면 어떤 결과가 나올 것 같나요? '글로벌'? 아니면 '현지'인가요? 사실은 그렇지 않습니다. 출력은 정의되지 않았습니다. 내 여담은 단지 이것에 대해 이야기하는 것입니다.
이는 실제로 객체 속성 바인딩 메커니즘과 관련이 있습니다. 모든 JavaScript 함수는 객체이기 때문입니다. 함수에 선언된 변수는 이 개체의 "유사한 속성"으로 간주될 수 있습니다. 객체 속성의 바인딩은 언어에서 "early 바인딩"과 "late 바인딩"으로 구분됩니다.
[초기 바인딩]
은 객체를 인스턴스화하기 전에 객체의 속성과 메서드를 정의하는 것을 의미합니다. 프로그램을 파싱할 때 미리 기계어 코드로 변환해 둘 수 있다. C, Java 등 일반적으로 입력되는 언어는 모두 초기 바인딩 메커니즘을 사용합니다. 그리고 JavaScript는 강력한 형식의 언어가 아닙니다. 이는 "후기 바인딩" 메커니즘을 사용합니다.
【Late Binding】
은 프로그램을 실행하기 전에 객체 유형을 확인할 필요 없이 객체가 속성과 메서드를 지원하는지 여부만 확인한다는 의미입니다. 바인딩하기 전에 페널티 없이 개체에 대해 많은 작업을 수행할 수 있습니다.
위 코드의 '사전 선언' 현상은 '후기 바인딩' 메커니즘으로 설명할 수 있습니다. 함수 범위 내에서 모든 변수는 "늦게 바인딩"됩니다. 즉, 해당 명령문은 최상위 수준입니다. 따라서 위 코드는 다음과 일치합니다.
alert(a);
a = 'local';
})(); >
alert(a) 이전에는 값을 할당하지 않고 a만 선언했습니다. 결과는 상상할 수 있습니다.
【직접 수량 방식】
직접 수량을 사용하여 객체를 구성하는 것이 가장 기본적인 방법입니다. 하지만 단점도 많습니다.
코드 복사
객체 Obj를 구성합니다. 속성 이름과 showName 메소드가 있습니다. 하지만 또 다른 유사한 객체를 만들고 싶다면 어떻게 해야 할까요? 다시 반복해야 하나요?
안돼! , 특정 유형의 객체를 반환하는 팩토리 함수를 사용하여 구현할 수 있습니다. 공장과 마찬가지로 파이프라인은 우리가 원하는 특정 유형의 결과를 출력합니다.
【팩토리 메소드】
코드 복사
return tempObj ;
}
var obj1 = createObj('obj_one');
var obj2 = createObj('obj_two');
많은 사람들이 이것을 사용하지 않습니다. 팩토리 함수 객체를 구성하는 형태. 그 이유 중 하나는 의미론입니다. new 연산자를 사용하여 구축하는 것만큼 형식적이지 않습니다. 또 다른 더 큰 이유가 있습니다. 왜냐하면 이 팩토리가 객체를 생성할 때마다 새로운 함수 showName()을 생성하기 때문입니다. 즉, 각 객체는 서로 다른 버전을 가지지만 실제로는 동일한 기능을 공유합니다.
어떤 사람들은 팩토리 함수 외부에서 showName을 정의한 다음 속성을 통해 메서드를 지정하여 이 문제를 피할 수 있습니다.
코드 복사
tempObj를 반환합니다.
}
var obj('obj_one'); obj2 = createObj( 'obj_two')
안타깝게도 이 메소드는 showName() 함수를 객체의 메소드처럼 보이지 않게 만듭니다.
[생성자 방식]
이 방식은 위 팩토리 함수의 첫 번째 문제, 즉 신규 연산자가 없다는 문제를 해결하기 위한 방식이다. 하지만 여전히 두 번째 문제를 해결할 수 없습니다. 살펴 보겠습니다.
function Obj(이름) {
this.name = 이름;
this.showName = function () {
alert(this.name)
}
}
var obj1 = new Obj('obj_one'); 🎜>var obj2 = new Obj('obj_two');
동시에 새로운 키워드를 사용하여 우리가 원하는 객체를 생성하는 것은 좀 더 "격식적"이라는 느낌을 줍니다.
안타깝게도 팩토리 함수와 동일한 메서드 함수를 반복적으로 생성하는 문제는 여전히 해결되지 않습니다.
[프로토타입 방법]
위의 방법들에 비해 이 방법은 메서드 함수가 여러 번 생성되는 문제를 해결한다는 큰 장점이 있습니다. 객체의 프로토타입 속성을 활용합니다. 우리는 객체 인스턴스를 재정의하기 위해 프로토타입을 사용합니다.
Obj .prototype.name = '나';
Obj.prototype.showName = function () {
alert(this.name)
}
var obj1 = new Obj();
var obj2 = new Obj();
1. 프로토타입은 생성자의 범위 밖에 있기 때문에 객체 생성 시 원하는 속성을 작성할 방법이 없고, 매개변수를 전달하여 객체 생성 시 속성값을 작성할 방법도 없습니다. 값은 개체가 생성된 후에만 재정의될 수 있습니다.
2. 치명적인 문제는 속성이 개체를 가리킬 때 개체가 여러 인스턴스에서 공유된다는 것입니다. 다음 코드를 고려하십시오.
Obj.prototype.name = '나';
Obj.prototype.flag = new Array('A', 'B')
Obj.prototype.showName = 함수() {
alert(this.name);
}
var obj1 = new Obj()
var obj2 = new Obj()
obj1.flag.push('C') ;
alert(obj1.flag); // A,B,C
alert(obj2.flag); //A,B,C
이러한 문제에 직면했을 때, [생성자 방식]과 [프로토타입 방식]을 결합하여 상호보완적으로 만들어야 할지 고민해야 합니다. . .
[생성자와 프로토타입 혼합 방식]
생성자 메서드를 사용해 속성을 생성하고, 프로토타입 메서드를 사용해 메서드를 생성할 수도 있습니다:
this.name = 이름
this; .flag = new Array(' A', 'B');
}
Obj.prototype = {
showName : function () {
alert(this.name);
}
var obj1 = new Obj();
var obj2 = new Obj()
obj1.flag.push('C')
alert(obj1.flag); // A,B,C
alert(obj2.flag); //A,B
이 방법은 프로토타입과 생성자의 장점을 효과적으로 결합한 방법이며 현재 가장 많이 사용되는 방법입니다. 부작용이 가장 적습니다.
따라서 프로토타입을 활성화하고 생성자에 추가하여 생성자를 더욱 시각적으로 통일할 수 있습니다. 이 일련의 과정은 단 한 번의 판단으로 완료될 수 있습니다.
var Obj = 함수(이름) {
this.name = 이름;
this.flag = new Array('A', 'B')
if(Obj의 유형) _init == '정의되지 않음') {
Obj.prototype = {
showName : function () {
alert(this.name);
}
Obj._init = true;
}
}
그러나 이 동적 프로토타이핑 방법에는 문제가 있는데, 이는 "JavaScript 고급 프로그래밍"에서 자세히 다루지 않습니다. 첫 번째 개체를 생성하면 개체가 인스턴스화되기 전에 프로토타입이 빌드되지 않으므로 전혀 액세스할 수 없습니다. 따라서 첫 번째 객체는 프로토타입 메서드에 액세스할 수 없습니다. 동시에 이 메서드는 하위 클래스 상속에도 문제가 있습니다.
다음 글에서 해결 방법을 설명하겠습니다.
사실 사용 편의성 측면에서는 이런 판단을 할 필요가 없다고 개인적으로 생각합니다. . . 하하 ^_^

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

Python은 데이터 과학 및 기계 학습에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명하며 데이터 분석 및 웹 개발에 적합합니다. 2. JavaScript는 프론트 엔드 개발의 핵심입니다. Node.js는 서버 측 프로그래밍을 지원하며 풀 스택 개발에 적합합니다.

JavaScript는 이미 최신 브라우저에 내장되어 있기 때문에 설치가 필요하지 않습니다. 시작하려면 텍스트 편집기와 브라우저 만 있으면됩니다. 1) 브라우저 환경에서 태그를 통해 HTML 파일을 포함하여 실행하십시오. 2) Node.js 환경에서 Node.js를 다운로드하고 설치 한 후 명령 줄을 통해 JavaScript 파일을 실행하십시오.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
