2013-07-23 6 views
1

이 코드가 있습니다확장 자바 스크립트 네이티브 오브젝트는

pPoint = function(x,y){ 
    this.x = x || 0; 
    this.y = y || 0; 
} 

pPoint.prototype = { 
    constructor:pPoint, 
    add:function(){ 
     return this.x+this.y; 
    } 
} 

을 그리고 내가 할 경우 :

a = new pPoint(10,20) 
console.log(a.add()); 

작품 기대 (30를 반환)한다.

나는이 이렇게 그러나 경우 :

Array.prototype = { 
    abcd:function(){ 
     console.log("bla bla testing");  
    } 
} 

을 그리고 다음이 수행 ... 왜

b = new Array(); 
b.abcd(); 

그것은 작동하지 않습니다?

나는 ... 내가 할 경우이 잘 작동하는지 알고

Array.prototype.abcd:function(){ 
     console.log("bla bla testing");  
    } 
} 
난 그냥 preivous 하나가 내 pPoint에서 작동하지 Array의 이유를 얻을 해달라고

...

바이올린 : http://jsfiddle.net/paulocoelho/wBzhk/

+0

이 방법으로 프로토 타입을 설정하면 (첫 번째 예제 인'pPoint.prototype = {}') pPoint.prototype.constructor는 pPoint 대신 Object를 가리키게됩니다. 생성자가 올바른 함수를 가리켜 야합니다. 사용하지 않고 다른 사람들이 코드를 확장 할 것을 기대하지 않는다면 문제가되지 않지만 언급할만한 가치가 있습니다. – HMR

답변

5

Array.prototype 속성은 쓰기 가능하지 않습니다.

따라서 은 아무런 효과가 없습니다.

인 을 보면 알 수 있습니다. 그들은 당신이로 교체하려는 새 개체의 표준 Array.prototype의 속성과 아니기 때문에


은 당신이 그렇게 할 수 있었다면, 당신은 내장 된 배열 방법을 모두 잃을 것이다.

+0

오, 재미 있어요. 그래서 그렇게하면 "프로토 타입"을 사용하여 설정 한 모든 것을 효과적으로 다시 작성하게됩니다. 감사! :) – PCoelho

+0

글쎄, 당신은 잠재적으로 할당 인스턴스 * * 할당 후 만든 인스턴스에 대한 느슨한 방법. 그러나 어쨌든 그것을 할 수 없기 때문에 그것은 논리적입니다. : - / – RobG

관련 문제