Вход

Просмотр полной версии : Метод класса (is not a function)


Luca
13.07.2017, 09:12
Здравствуйте

let app = document.getElementById('app');

class P1 {
constructor(name){
Object.setPrototypeOf(this,null);
this.name = name;
}
}

class P2 extends P1 {
constructor(name){
super(name);
}
getProto(){
return Object.getPrototypeOf(this);
}
}

let cl = new P2('Luca');
app.innerHTML = cl.getProto();

почему cl.getProto() не находится, но пишет "is not a function"?

Luca
13.07.2017, 09:58
Rise,
зло в этом месте (строка 5 предыдущего поста). строку комментируешь и начинает работать...

Object.setPrototypeOf(this,null);

я так полагал:
P2 наследует от P1, P1 не наследует, а получеатся, что P2 "теряется", тк

log(Object.getPrototypeOf(cl));


> P1 {constructor...}

Luca
13.07.2017, 10:27
Rise,
я понял. только я хотел другого.
я полагал, что отрезал прототип у P1, но для P2 прототип будет P1, а получется, что отрезается полностью вместе с getProto(), хотя это же явно просписанный метод, который, как я полагал не принадлежит никакому прототипу, а является собственным...
те P2 -> P1 -> null, а получается что и getProto() отрезается...

Luca
13.07.2017, 11:49
я вот о чём:

class P {
constructor() {
this.kuku();
}
kuku() {
alert('kuku');
}
}

let var1 = new P();
console.log(Object.getPrototypeOf(var1));
var1.__proto__ = null;
console.log(Object.getPrototypeOf(var1));
var1.kuku();

куда "куку" делось? ведь я изменил ссылку на прототип сконструированный объект я не трогал
все свойства и методы при конструировании пишутся в прототип что ли?