• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

왜 객체는 keys함수를 쓸 수 없나요?

19.11.28 11:41 작성 조회수 98

0

안녕하세요, 먼저 양질의 강의 늘 감사드립니다 :)

다름이 아니고 아래와 같은 코드가 있을 때, 왜 3번째라인은 불가능한지 잘 모르겠습니다.

var o = {"name":"egoing", "age":20, "city":"Seoul"}

Object.keys(o);

o.keys(o);

A객체가 B객체를 상속할 때, B객체의 기능을 사용할 수 있고, Object는 모든 객체가 상속하는 객체니까,

var o는 Object를 상속하잖아요...?

그러면 o는 Object의 keys라는 기능을 사용할 수 있어야 할 거 같은데 

왜 쓸 수가 없는지 궁금합니다.

강의 상에서는 keys라는 함수가 toString()함수처럼 Object.prototype 내에 정의되어 있지 않기 때문이라고 하셨지만.

위에 쓴 흐름에 따르면 쓸 수 있어야할 것 같아서요.

아래와 같은 코드를 작성해서 시험해봤을때도,

굳이 Person.prototype.introduce = function(){}으로 정의하지 않아도,

Programmer 객체가 들어간 p2가 introduce()함수를 쓸 수 있더라고요...

function Person(name){ 

this.name = name; 

this.introduce = function(){ return 'My name is '+this.name;}

}

Programmer.prototype = new Person();

var p1 = new Programmer();

p1.introduce(); //출력 : "My name is undefined"

답변 부탁드립니다.

감사합니다

답변 2

·

답변을 작성해보세요.

0

SeungHyuk Shin님의 프로필

SeungHyuk Shin

2021.05.05

쉽게 Object.func()는 Object만 사용할 수있는 함수고 Object.prototype.func() 그 Obejct를 상속받는 객체들이 사용할 수 있는 함수다라고 생각하심 될듯함니다

0

KH K님의 프로필

KH K

2021.01.08

function o() {

      }

      o.num1 = function () {

        document.write('call num1');

      }

      o.prototype.num2 = function () {

        document.write('call num2')

      };

      var a = new o();

      a.num2();

      o.num1();

      a.num1();

이런 원리 인것 같습니다.

o라는 생성자 함수 안에 num1이 있고 

o생성자 함수의 prototype에 num2가 들어가있습니다.

여기서 생성자함수로 a라는 빈 객체에 o로 만든 객체를 집어넣으면

o라는 생성자 함수의 내용과 생성자 함수의 prototype에 속해있는 num2만 들어가고 num1은 들어가지 않습니다.

고로 new 생성자함수(); 는 생성자 함수의 내용과 생성자함수 안에 있는 prototype만 상속해주고 o.~~로 생성된 함수는 상속해 주지 않습니다!

위의 코드가 적용된 이유는 this라는 객체의 특수성으로 성립 된 것 같습니다.

저도 헷갈렸는데 덕분에 완전이해했습니다 ㅋㅋ;