2015-01-31 3 views
1

는 평소 같이, (여러 대신 동일한 코드를 갖는의) 여러 인스턴스가 동일한 코드를 참조하도록 상기 .prototype 속성 생성자 함수 연장 그러나언제 javascript가 생성자에서 사용되는 함수를 참조합니까?

function Effect(){} 
Effect.prototype.run = function(){} 

인해 내 현재 프로젝트의 구조, 효과 옵션,

effects 객체를 정의합니다 : 나는 같은 것을 할 싶습니다

var effects = { 
    e1 : { 
     run: function(){console.log(this);} 
    }, 
    e2 : { 
     run: function(){console.log(this);} 
    } 
} 

하는 사용 효과 인스턴스를 작성 O bject

function Effect(effect) { 
    this.run = effect.run;  
} 

지금 나는 .run 기능을 여러 번 정의 될 경우 내가 걱정하지만 여러 인스턴스 (아마도 수백)

var E1 = new Effect(effects.e1); 
var E2 = new Effect(effects.e2); 
var E3 = new Effect(effects.e2); 
..... 

을 만들 수있는 정의.

이러한 새 인스턴스는 동일한 함수 (effects 개체에 정의 됨)를 참조합니까, 아니면 메모리 공간을 사용하여 각 인스턴스에 대해 새로운 '로컬'함수를 만들지 않습니까?

+0

확실하지 않지만 'run : functionRun1' 참조를 전달할 수 있습니다. – Jonathan

답변

1

함수는 객체이므로 항상 참조로 저장됩니다. 다른 변수 나 속성에 할당하면 기존 함수 객체에 대한 새로운 참조 만 생성되고 해당 변수 나 속성에 필요한 것보다 많은 메모리를 사용하지 않습니다.

+0

하지만이 대답에 따르면 : http://stackoverflow.com/questions/8433459/js-why-use-prototype, 함수는 각 인스턴스에 만들어집니다. 그것이 나의 예에서 그렇다면 단지 궁금하다. – LongInt

+0

거기에 * 함수 표현식은 모든 생성자 호출마다 평가되므로 매번 새 함수 객체가 만들어집니다 (그리고 나서 해당 인스턴스에 할당됩니다). 이 일을 담당하는 임무가 아닙니다. – Bergi

+0

아, 지금은 의미가 있습니다. 가끔은 올바른 표현에 불과합니다. :) – LongInt

관련 문제