프로토 타입에 있는 값을 객체 인스턴스에서 읽어올 수는 있지만 수정은 불가능하다. 


<delete> http://jsbin.com/saxesu/5/edit

delete instance.property 하면 그 객체의 프로토타입. property에 덧씌운 값이 사라진다.  delete를 하지 않으면 원래 프로토타입의 값을 다시 찾을 수 없다. 

프로토타입에서 설정한 내용은 객체의 프로퍼티에 직접 값을 넣어 수정할 수 있다.

그러나 한번 프로퍼티를 만들고 나면 그 값을 본디 프로토타입 에서 찾아올 수 없다. 그래서 새로 부여한 프로퍼티를 없애려면 delete instance.property;를 해줘야 한다.


<hasOwnProperty()>


1 function Person() { 2 3 } 4 5 Person.prototype.name = "dayoungle"; 6 Person.prototype.age = 12; 7 Person.prototype.job = "software engineer"; 8 Person.prototype.sayName = function() { 9 alert(this.name); 10 }; 11 12 var person1 = new Person(); 13 var person2 = new Person(); 14 15 person1.name = "gd"; 16 //person1.sayName(); 17 //person2.sayName(); 18 19 delete person1.name; 20 21 alert(person1.hasOwnProperty("name")); 22 //프로토 타입 위에 덧씌우는 순간, 인스턴스의 프로퍼티. 23 person1.name = "dg"; 24 

25 alert(person1.hasOwnProperty("name"))


hasOwnProperty("property_name")하면 객체에 이러한 이름의 프로퍼티가 할당되어 있는지를 확인한다.  객체에 해당하는 프로퍼티 이름이 있는지를 확인해서 boolean값을 반환한다. 


<in >

"propertyname" in instance;하면 객체나 프로토타입 어디에든 이 이름이 있을 때 true를 반환한다. 만약 hasOwnProperty("propertyName");에서 false가 나왔는데, in을 사용했을 때 true가 나온다면 프로토타입에는 해당하는 항목이 있다는 의미가 된다. 


1 function Person() { 2 3 } 4 5 Person.prototype.name = "dayoungle"; 6 Person.prototype.age = 12; 7 Person.prototype.jpb = "software engineer"; 8 Person.prototype.sayName = function() { 9 alert(this.name); 10 }; 11 12 var person1 = new Person(); 13 var person2 = new Person(); 14 15 person1.name = "gd"; 16 //person1.sayName(); 17 //person2.sayName(); 18 19 delete person1.name; 20 21 //alert(person1.hasOwnProperty("name")); 22 //프로토 타입 위에 덧씌우는 순간, 인스턴스의 프로퍼티. 23 person1.name = "dg"; 24 25 //alert(person1.hasOwnProperty("name")); 26 //alert(person1.name); 27 28 alert(person1.hasOwnProperty("name"));//true 29 alert("name" in person1);//true 30 31 alert(person2.hasOwnProperty("name"));//false

 32 alert("name" in person2);//true



<in 2>

for-in 을 사용하면 instance의 property만 검색한다. 따라서 프로토타입의 프로퍼티는 나오지 않음. 이것을 예방하기 위해서 Objects.keys("constructor.prototype")을 쓴다. 그러나 이것은 instance의 property는 나오지 않는다. 반면, Objects.keys(instance)를 하면 프로토타입의 프로퍼티는 나오지 않는다. 이를 예방하기 위해서 Object.getOwnPropertyNames(constructor.prototype)하면 생성자까지 다 나온다.  


  1 for(var prop in o){
  2   if(prop = toString){
  3     alert("found");
  4   }
  5 }
  6 
  7 var keys = Object.keys (Person.prototype);
  8 alert(keys);
  9 
 10 var p1keys = Object.keys(person1);
 11 alert(p1keys);//이렇게 하면 새로 설정한 인스턴스 프로퍼티만 나옴.
 12 
 13  alert(Object.getOwnPropertyNames(Person.prototype));




자바는 안했고, 자바스크립트를 봄.

http://jsbin.com/saxesu/1/edit 에 정리했음.


팩토리 패턴

생성자패턴

프로토타입

각각의 구분을 이해하고, 생성자와 프로토 타입이 어떤 차이가 있는지 기억할 것.


자바 수업시간에 나왔던, Class, object, instance사이의 구분을 잘 이해할 것.

미묘하게 까다롭다. 대충 이해하고 있지만...상관없을 듯도 하다;

'일지라고 쓰고 일기' 카테고리의 다른 글

12월 22일 일지  (0) 2014.12.22
8월 5일  (0) 2014.08.05
7월 29일 오랜만에 코딩  (2) 2014.07.29
7월 24일 목요일  (0) 2014.07.24
7월 22일  (0) 2014.07.22

사다리 타기했음. 사다리 틀 구현.

1. 전체적으로 의문이 드는 부분이, 아랫단에서 만든 작은 객체를 윗 단에서 가져다가 다시 새로운 객체로 묶어쓸 때, 전역으로 해서 가져다 쓰는데..요때, 전역에 묶어두는 어레이리스트를 그 객체 내부에서 어떻게 쓸지(-리턴을 할지, 아니면 그냥 전역변수를 찹조해서 바꿀지) 가 정확히 판단하기 어려웠다. 바본가? 되게 기초적인 것 같은데.ㅋㅋ



 2. 랜덤함수를 쓰는데 


int range = (int)(Math.random()*10) + 1;


이걸 제대로 쓰질 않아서 계속 0값이 나왔다.

처음에 쓸 떄는 


int range = (int)Math.random()*10 + 1;


요렇게 했던 것 같은데, 이렇게 하면 영락없이 계속 1만 나온다. 원리는 random 함수를 찍으면, 0.00...~부터 1.00...사이의 소수가 나오기 때문에 그걸 * 10하면 0~9사이의 숫자가 나오고, +1하면 1부터 10사이의 숫자를 얻을 수 있음. 바보냥. ㅋㅋㅋ괄호를 묶어주지 않아서 발생하는 문제가 정확히는 뭔지 모르겠지만. 문제가 발생함. 사실 삽질을 여러번해서 내가 초기에 썼던 문제가 뭔진 잘 모르겠다. 

'일지라고 쓰고 일기' 카테고리의 다른 글

12월 22일 일지  (0) 2014.12.22
8월 5일  (0) 2014.08.05
8월 4일  (0) 2014.08.04
7월 24일 목요일  (0) 2014.07.24
7월 22일  (0) 2014.07.22

+ Recent posts