2013-05-22 5 views
1

과 같은 Object.prototype에 속성을 추가하는 경우 Object.prototype.sth = "something";Object.prototype의 속성을 숨길 수있는 방법이 있습니까?

그러면 지정한 개체의 속성을 숨길 수 있습니까? 나는이 같은 시도 :

function Foo() { 
// sth... 
} 
Foo.prototype = null; 
var bar = new Foo(); 

그러나, 바는 여전히 속성 STH에 액세스 할 수 있습니다;


bar.__proto__ = null 또는 Foo.prototype.__proto__ = null

+1

왜? 너 뭐하려고? –

+1

그것은 불가능합니다,하지만 당신은이 답변을 좀 볼 수 있습니다 : http://stackoverflow.com/a/2636719/2183827 – Deepsy

+0

그냥 프로토 타입 체인의 개념을 이해하려고 노력하고 있어요 ... – Yon

답변

0

내가이 작업을 수행 할 수있는 방법은 생각 작동합니다

function Foo() { 
     this.sth = null 
// or this.sth = undefined; 
    } 

    var bar = new Foo(); 
  • Foo.prototype = null; 다음 bar.__proto__Object.prototype에 직접 가리 킵니다. Foo.prototype = null;없이
  • : Object.prototype

또 다른 방법으로 bar.__proto__Foo.prototype를 가리키는 것이며, Foo.prototype.__proto__ 점 : 당신이 nullFoo.prototype을 무시할 경우

function Foo() { 
// sth... 
} 
Foo.prototype.sth = undefined; 
//or Foo.prototype.sth = null; 
var bar = new Foo(); 
+0

그냥 속성을 추가 할 수 있습니다. 프로토 타입 체인을 여행하기 위해 자바 스크립트를 구현하는 객체 – Yon

+0

@YOnder : 나는 그것이 하나의 방법이라고 생각합니다. 당신은 Foo.prototype.sth undefined를 사용할 수 있습니다; –

+0

어쨌든, 자체 속성 또는 더 가까운 프로토 타입 속성을 사용하여 재정의해야합니다. –

0

는 사실, 푸의 속성이 삭제됩니다.

Foo.prototype.sth = 1; 
bar = new Foo(); # Creates {sth:1} 
Foo.prototype = null; 
bar = new Foo(); # Creates {} 

documentation page을 살펴 보자 그들은 즉, 널 프로토 타입 객체, 객체를 제외하고 (오버라이드 (override) 할 수 있지만

모든 객체는 Object.prototype에 Object.prototype에에서 메서드와 속성을 상속을 .create (null)).

관련 문제