문제

거기에 몇 가지 방법 등과 같은 동작을 자바스크립트에서 가장 일반적인 것 같 시제품을 기반으로 다음과 같다:

function Vector(x, y, x) {
    this.x = x;
    this.y = y;
    this.z = z;
    return this;
}

Vector.prototype.length = function () { return Math.sqrt(this.x * this.x ... ); }

와 폐쇄 기반 접근법과 유사하

function Vector(x, y, z) {
    this.length = function() { return Math.sqrt(x * x + ...); }
}

다양한 이유 후자는 더 빨리,하지만 나는 본 적이(그리고 내가 빈번하게 작성)프로토타입 버전과 호기심이었으로 어떤 다른 사람 않습니다.

도움이 되었습니까?

해결책

당 함수 프로토 타입입니다 더 나은(공법)기 때문에 모든 클래스의 인스턴스 공유할 것입니다 동일한 복사의 방법입니다.을 할당할 경우 기능 안에 생성자으로 두 번째 예에서,모든 시간을 당신은 새 인스턴스를 만들고,생성자를 만듭니다 새로운 복사본을의 길이는 기능을 할당하는 인스턴스입니다.

그러나 이 후기 기술은 유용한 경우 고 싶 각 사본에 있는 그것의 자신의 사본을 주의 사용되는 개인/권한 방법에 액세스할 수 있는 개인 변수를 선언한 내부에 생성자와 상속을 통해 폐쇄 메커니즘이 있습니다.

더글러스 좋은 Crockford 요약.

다른 팁

또한 객체 리터럴 접근 시제품:

var Vector = function(){};

Vector.prototype = {
  init:function(x,y,z) {
    this.x = x;
    this.y = y;
    this.z = z;
  },
  length:function() {
    return Math.sqrt(x * x + ...);
  }
};

var v1 = new Vector();
v1.init(1,2,3);

다행히 나를 사용하여 얻을 수 prototype.js, 제공하는 몇 가지 좋은 중요한 헌납자이었습니다.그래서 당신은 작업을 수행 할 수 있습니다:

var Person = Class.create({
    initialize: function(name) {
        this.name = name;
    },
    say: function(message) {
        return this.name + ': ' + message;
    }
});

Prototype.js 문서:을 정의하는 클래스를 상속

만,나는 정말 없는 전문가 의견에 이다.나는 일반적으로 사용하게 폐쇄 기반 접근 방법만을 유지하기 때문에 코드를 간단하게 합니다.하지만,나는 나 자신을 발견했을 사용하여 프로토타입에 대한 방법이 있는 로드 라인의 코드입니다.

당신은 또한 당신의 선택:

function Vector(x, y, z) {
  function length() {
    return Math.sqrt(x * x + ...);
  }
}

아마 다만으로 예 두지만,더 보는 Java/C#이 조금 더 분명하게 명시되어 있습니다.

나의 큰 팬을 사용하여 존 레식 라이브러리 니다.가볍고,똑바로 앞으로 그리고 당신은 이미 알고 그것을 사용하는 방법에 익숙하다면으로'보통'객체 지향 스타일입니다.

이 없 클래스에서 javascript.

물체가 그러나입니다.당신이 필요로 하지 않는 클래스를 만들 수 있는 객체에서 javascript.그것은 constuctor 함수를 호출할 수 있습으로 새로운 예를 들어:

var james = new Person();

할 수 있는 시뮬레이션 등과 같은 행동:

프로토 타입를 들어:

function Car (type) {
    this.type = type;
    this.color = "red";
}

Car.prototype.getInfo = function() {
    return this.color + ' ' + this.type + ' car';
};

체 리터럴 예

var car = {
    type: "honda",
    color: "red",
    getInfo: function () {
        return this.color + ' ' + this.type + ' car';
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top