2012-01-20 2 views
1

개인 회원의 crockford의 페이지을 Javascript에서 읽고 다소 관련있는 질문이 있습니다. 왜 개발자는 Prototype을 사용해야합니까? 예를 들어 Javascript에서 Prototype을 사용하면 어떤 이점이 있습니까?

,

예를 들어, 나는이

var Foo = new Object(); 
Foo.bar = function() { alert('Its a bar'); }; 
var x = Foo; 
x.bar(); 

대신이 구현

var Foo = function(){}; 
Foo.prototype.bar = function(){alert('Its a bar');}; 
var x = new Foo(); 
x.bar(); 

모두를 할 수있는 동일한 작업을 수행. 다른 하나와 다른 점은 무엇입니까? 이것은 어떤 식 으로든 상속에 영향을 줍니까?

+1

당신은 여기에 디자인 패턴을 읽을 수 있습니다 http://addyosmani.com/resources/essentialjsdesignpatterns/book/#prototypepatternjavascript 달콤한 –

+0

을! 링크 주셔서 대단히 감사합니다! – thandasoru

답변

3

프로토 타입 패턴을 사용하면 프로토 타입에 추가하는 특성의 인스턴스가 하나만 존재합니다.

// Lets create 1000 functions which do the same thing 
for (var i=0;i<1000;i++) { 
    Foo = new Object(); 
    Foo.bar = function() { alert('Its a bar'); }; 

    var x = Foo; 
    x.bar(); 
} 

// This is the same as #1, but is more common 
function Foo() { 
    this.bar = function() { alert('It\'s a bar'); }; 
} 
for (var i=0;i<1000;i++) { 
    var x = new Foo; 
    x.bar(); 
} 

// Lets create 1 function 
var Foo = function(){}; 
Foo.prototype.bar = function(){alert('Its a bar');}; 
for (var i=0;i<1000;i++) { 
    var x = new Foo(); 
    x.bar(); 
} 

프로토 타입 패턴은 개인 회원에 액세스 할 수 없다는의 단점이있다.

// Lets create 1 function 
var Foo = function(){ 
    var private = 4; 

    this.baz = function() { 
     alert(private); 
    } 
}; 
Foo.prototype.bar = function(){alert(private);}; 

var x = new foo; 
x.bar(); // error; `private` is undefined 
x.baz(); // ok 
+0

안녕하세요, 위의 스 니펫을 이해할 수 없습니다. 위 중 어느 것을 사용하는 것이 좋을지 말해 줄 수 있습니까? – thandasoru

+0

좋아, 이제는 이해할 것 같아. 프로토 타입 패턴을 사용하면 프로토 타입 체인에서 하나의 'bar'함수 만 존재하게됩니다. 다른 하나는 1000 가지의 함수를 만듭니다. 그게 맞습니까? 그렇다면 프로토 타입 패턴을 사용하는 것이 좋습니다. 맞습니까? 또한 첫 번째에서는 x가 Foo 유형이지만 두 번째 경우에는 x가 'Object'유형입니다. 감사합니다. – thandasoru

+0

@thandasoru : 맞습니다. 객체의 인스턴스를 많이 생성하는 경우 프로토 타입 patten을 사용해야합니다. 그렇지 않으면 눈에 띄는 차이가 없습니다. – Matt

관련 문제