문제
거기에 몇 가지 방법 등과 같은 동작을 자바스크립트에서 가장 일반적인 것 같 시제품을 기반으로 다음과 같다:
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;
}
});
만,나는 정말 없는 전문가 의견에 이다.나는 일반적으로 사용하게 폐쇄 기반 접근 방법만을 유지하기 때문에 코드를 간단하게 합니다.하지만,나는 나 자신을 발견했을 사용하여 프로토타입에 대한 방법이 있는 로드 라인의 코드입니다.
당신은 또한 당신의 선택:
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';
}
}