Dev-dotoli TIL

JS 31 Object



Object

demo34.html


Object라는 이름을 가진 객체

object객체는 가장 기본적인 형태를 가지고 있는 객체임
다시말해 아무것도 상속받지 않는 순수한 객체

JS에서는 값을 저장하는 기본적인 단위로 Object를 사용함

var grades = { dotoli: 10, zzphoo: 6, Dev_dotoli: 80 };

//객체의 효용
//(각각의 값을가진)객체를 만들어 변수에 저장한다는 개념

어떤객체를 만들어도 존재했던 .prototype은
사실 모든 객체의 부모격인 Object의 property였던 것?

그러니까 만약
모든 객체가 가져야 할 기능을 추가하고 싶다면
Object 객체에 method를 추가하면 된다는 것



Object.keys( )

var arr = ["a", "b", "c"];
console.log("object.keys(arr)", Object.keys(arr));
//: object.keys(arr) (3) ['0', '1', '2']
//배열에 담겨있는 index의 list를 만들어서 배열로 retun

var o = { name: "zzphoo", age: "20", city: "seoul" };
console.log(Object.keys(o));
//: ['name', 'age', 'city']
// key값을 배열로 만들고 return함

Object.prototype.toString( )

const o = {};
console.log(o.toString());
//: [object Object]

const a = [1, 2, 3];
console.log(a.toString());
//: 1,2,3



//Object.keys()
var arr = ["a", "b", "c"];
console.log("object.keys(arr)", Object.keys(arr));
//생성자함수.keys = function

//Object.prototype.toString()
var o = new Object();
console.log("o.toString()", o.toString());
var a = new Array(1, 2, 3);
console.log("a.toString()", a.toString());
//생성자함수.prototype.tostring = function
//생성자함수를 이용해서 new Object로 객체를 만들면
//property를 상속하는 객체가 생성됨
//그러면 method로써 toString을 사용함

Object에 .prototype이 있고 없고에 따라 사용하는 방법이 다름

  • 음.. 잘 이해안됨

Object객체를 확장하면
모든 객체가 접근할 수 있는 API를 만들 수 있음


확장

  • .contain method를 추가해서
    인자로 넣은 값이 유무를 true, false로 표현하려고 할 때
Object.prototype.contain = function (check) {
  for (var name in this) {
    if (this[name] === check) {
      return true;
    }
  }
  return false;
};

var o = { name: "egoing", city: "seoul" };
console.log(o.contain("egoing"));
//true
var a = ["egoing", "leezche", "grapittie"];
console.log(a.contain("leezche"));
//true

plus

Object.prototype.contain = function (check) {
  for (var name in this) {
    if (this[name] === check) {
      return true;
    } else false;
  }
};
// 이렇게 짰더니 false부분이 undefined
else return false;
// 첫인자만 작동 나머지 false


확장의 위험

모든객체에 영향은 준다는 것은 장점이자 위험요소

for (var name in o) {
  console.log(name);
}
//name
//city
//contain

//확장하면서 모든 객체에 추가했던 contain이라는 method가
//객체 o 안에도 추가되어버림 - 원했던 결과가 아님
for (var name in a) {
  console.log(name);
}
//0
//1
//2
//contain


이럴때 사용할 수 있는 방법

.hasOwnProperty

실행한 객체가 인자로 전달한 어떤 값을
자신의 property로 가지고 있는지

for (var name in a) {
  if (a.hasOwnProperty(name)) {
    console.log(name);
  }
}
// 0
// 1
// 2
for (var name in o) {
  if (o.hasOwnProperty(name)) {
    console.log(name);
  }
}
//name
//city