영리한 1: 함수
함수는 JavaScript 코드에서 보기 드문 재능입니다.
♥ 코드 세그먼트를 배치하고 상대적으로 독립적인 기능을 캡슐화할 수 있습니다.
♥ 클래스를 구현하고 OOP 아이디어를 주입할 수도 있습니다.
jQuery는 함수입니다. 클래스라고 생각할 수도 있습니다(하하, 그 자체가 클래스입니다).
(function(){
var jQuery = function() {
// 함수 본문
}
window.jQuery = window.$ = jQuery
})()
console.log(jQuery) ;
위의 빈 함수는 소위 생성자입니다. 생성자는 객체지향 언어에서 클래스의 기본 메서드입니다.
Clever 2: Extended Prototype
프로토타입 객체란 무엇인가요?
http://www.jb51.net/article/32857.htm에 대해 읽어보실 수 있는 블로그 포스팅을 전해드리겠습니다.
JavaScript는 프로토타입 속성을 모든 함수에 바인딩하며 이 속성은 프로토타입 객체를 가리킵니다. 프로토타입 객체에서 클래스의 상속된 속성과 메서드를 정의합니다.
프로토타입 객체는 JavaScript가 상속을 구현하는 기본 메커니즘입니다.
(function(){
var jQuery = function () {
// 함수 본문
}
jQuery.fn = jQuery.prototype = {
// 확장 프로토타입 객체
jquery: "1.8.3",
test: function() {
console.log('test');
}
}
window.jQuery = window.$ = jQuery
})(); >
(new jQuery()).test();
영리한 방법 3: 팩토리 메소드를 사용하여 인스턴스 생성
위 메소드는 다음을 사용하여 호출해야 합니다. 방법을 사용하므로 많은 객체가 생성되어 메모리 소비가 낭비됩니다.
(new jQuery()).test();
jQuery 소스 코드는 호출 시 친숙한 팩토리 메서드인 매우 부드러운 메서드를 사용합니다.
(function(){
var jQuery = function () {
// 함수 본문
return jQuery.fn.init();
}
jQuery.fn = jQuery.prototype = {
// 확장 프로토타입 객체
jquery: "1.8.3",
init: function() {
return this;
},
test: function() {
console.log('test') ;
}
}
window.jQuery = window.$ = jQuery
})()
jQuery().test();
상상 1: jQuery 함수 본문이 객체를 직접 반환하도록 하세요. 저는 이것을 사용합니다
코드 복사
return this;
}
jQuery.fn = jQuery.prototype = {
//확장 프로토타입 객체
jquery: "1.8.3",
test: function() {
console.log('test')
}
}
window.jQuery = window.$ = jQuery
})()
console.log(jQuery())
출력결과
여기가 Window 개체를 가리키는 것으로 나타났습니다.
상상 2: jQuery 함수 본문이 클래스의 인스턴스를 직접 반환하도록 하세요.
코드 복사
return new jQuery();
}
jQuery.fn = jQuery.prototype = {
// 확장 프로토타입 객체
jquery: "1.8. 3",
테스트: function() {
console.log('test');
}
}
window.jQuery = window.$ = jQuery;
}) ();
console.log(jQuery())
결과 출력
위 내용은 재귀적 무한 루프이며 메모리 오버플로가 발생한 것을 확인했습니다.
영리함 4: 범위 분리
생각 1: init() 메서드가 반환하는 이 범위는 무엇인가요?
코드 복사