해결된 질문
작성
·
178
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
쉽게 Object.func()는 Object만 사용할 수있는 함수고 Object.prototype.func() 그 Obejct를 상속받는 객체들이 사용할 수 있는 함수다라고 생각하심 될듯함니다
0
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라는 객체의 특수성으로 성립 된 것 같습니다.
저도 헷갈렸는데 덕분에 완전이해했습니다 ㅋㅋ;