2016-11-08 10 views
5

이 코드에서 프로토 타입은 여전히 ​​변경 될 수 있습니다.프로토 타입 변경을 방지하는 방법은 무엇입니까?

어떻게 프로토 타입을 변경할 수 있습니까? 내가 프로토 타입 변경을 방지 할 수있는 방법

var a = {a:1} 
var b={b:1} 
var c = Object.create(a) 
Object.getPrototypeOf(c) //a 
c.__proto__ = b; 
Object.getPrototypeOf(c) //b 
var d = Object.create(null) 
Object.getPrototypeOf(d) //null 
d.__proto__ = b; 
Object.getPrototypeOf(d) //null 
+1

하는 데 도움이 freeze reference

확인이 조각을 참조/그것을 봉쇄하십시오. – Bergi

+1

'__proto__'는 더 이상 사용되지 않습니다. 필요한 경우 Object.setPrototypeOf를 사용하십시오. – Bergi

답변

5

?

나는 당신이 프로토 타입 객체 자체를 돌연변이시키는 것에 대해 이야기하는 것이 아니라 기존 객체의 프로토 타입을 덮어 쓰기한다고 가정합니다.

var a = {a:1} 
 
var b = {b:1} 
 
var c = Object.create(a) 
 
Object.preventExtensions(c) 
 
console.log(Object.getPrototypeOf(c)) //a 
 
c.__proto__ = b; // Error

을하지만 그것은 또한 당신이 그것에 새로운 속성을 추가 할 수 있다는 것을 의미합니다 :

당신은 그것을 방지하기 위해 Object.preventExtensions()를 사용할 수 있습니다. 또한 필요에 따라 Object.freeze() 또는 Object.seal()을 사용할 수 있습니다. 개체 수정을 더 많이 제한 할 수 있습니다.

다른 방법은 없습니다.

0

예, Object.freeze를 사용할 수 있습니다.

Object.freeze() 메서드는 객체를 정지 시키므로 새로운 속성이 추가되지 않습니다. 기존 속성이 제거되지 않도록합니다. 기존 등록 정보 또는 열거 가능성, 구성 가능성 또는 쓰기 가능성이 변경되는 것을 방지합니다. 본질적으로 객체는 효과적으로 변경되지 않습니다. 이 메서드는 고정중인 개체를 반환합니다.

var a = {a:1} 
 
var b={b:1} 
 
var c = Object.create(a) 
 
Object.getPrototypeOf(c) //a 
 
Object.freeze(c); 
 
c.__proto__ = b;//throws error now 
 
console.log(Object.getPrototypeOf(c)) //a 
 
var d = Object.create(null) 
 
Object.getPrototypeOf(d) //null 
 
d.__proto__ = b; 
 
Object.getPrototypeOf(d) //null

는 희망이 당신이 동결 수 있음을 의미 프로토 타입이 다른 모든 같은 단지 객체입니다