source

시제품의 목적은 무엇입니까?

manycodes 2022. 11. 26. 13:57
반응형

시제품의 목적은 무엇입니까?

중복 가능성:
'프로토타입'과JavaScript에서 'this'를 사용할 수 있습니까?

네, 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

반응형