시제품의 목적은 무엇입니까?
네, JS에서 OOP라는 개념은 조금 생소합니다.
아래에 기재되어 있는 두 코드 조각의 차이점은 무엇입니까?
function animal(){
this.name = 'rover';
this.set_name = function(name){
this.name = name;
}
}
function animal(){
this.name = 'rover';
}
animal.prototype.set_name = function(name){
this.name = name;
}
둘 다 같은 일을 하는데 뭐가 달라?
프로토타입을 사용하면 새 개체를 만들 때마다 프로토타입을 통해 속성/메서드를 다시 만들 필요가 없으므로 개체를 더 빨리 만들 수 있습니다.
이 경우:
function animal() {
this.name = 'rover'
this.set_name = function (name) {
this.name = name
}
}
그set_name
메소드는 동물을 만들 때마다 생성됩니다.하지만 이렇게 하면
animal.prototype.set_name = function (name) {
this.name = name
}
메소드는 매번 다시 만들 필요가 없습니다. 프로토타입의 한 위치에 있습니다.그래서 당신이 전화했을 때someAnimal.set_name("Ubu");
그this
컨텍스트가 로 설정됩니다.someAnimal
그리고 (하나뿐인)set_name
메서드가 호출됩니다.
첫 번째 구문을 사용하면 다음과 같은 방법으로 작성된 메서드는 개인 데이터에 액세스할 수 있다는 장점이 있습니다.
function animal() {
var privateData = 'foo'
this.name = 'rover'
this.set_name = function (name) {
this.name = name
alert(privateData) //will alert 'foo'
}
}
Douglas Crockford는 이러한 이유로 이렇게 작성된 메서드를 "특권"이라고 부릅니다. 즉, 퍼블릭 데이터와 프라이빗 데이터 모두에 액세스할 수 있습니다.
이러한 함수에서 새 개체를 만들 때 차이가 나타납니다.
var animal1 = new animal();
첫 번째 함수에 의해 생성된 모든 객체는 서로 다릅니다.name
그리고.set_name
특성.단, 두 번째 함수에 의해 작성된 모든 객체가set_name
소유물.
첫 번째 예에서는 각각의 개별 동물이 set_name 함수에 대한 고유한 속성을 가지지만 두 번째 예에서는 프로토타입을 통해 동일한 함수를 공유합니다.
첫 번째 버전의 장점은 메서드가 컨스트럭터 내에서 선언된 로컬(프라이빗) 변수에 액세스할 수 있다는 것입니다.
두 번째 방법의 장점은 필요한 메모리가 적고(메서드를 백만 번 저장하는 것이 아니라 한 번만 저장하므로) 현재 JS 엔진에서 성능이 향상된다는 것입니다.
두 번째 방법을 사용하면 이미 생성된 인스턴스에도 영향을 미치는 방식으로 메서드를 클래스에 추가하거나 수정할 수도 있습니다.
언급URL : https://stackoverflow.com/questions/8433459/what-s-the-purpose-of-prototype
'source' 카테고리의 다른 글
JavaScript에는 지정된 범위 내에서 범위를 생성하는 "range()"와 같은 메서드가 있습니까? (0) | 2022.11.26 |
---|---|
웹 페이지를 통해 파라미터를 PHP 스크립트로 전달하려면 어떻게 해야 합니까? (0) | 2022.11.26 |
컬렉션/어레이/목록에서 쉼표로 구분된 문자열을 만드는 가장 정교한 방법은 무엇입니까? (0) | 2022.11.26 |
A1과 같은 테이블을 A2로 작성 (0) | 2022.11.26 |
Vue.js 또는 React 컴포넌트를 사용하는 이유 (0) | 2022.11.26 |