Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.07.2017, 09:12
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Метод класса (is not a function)
Здравствуйте
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"?
Ответить с цитированием
  #2 (permalink)  
Старый 13.07.2017, 09:35
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Luca, видимо одноименный метод должен существовать и в родительском классе, а в дочернем классе нет возможности добавить неодноименные методы, можно только переопределить одноименные, вот такие убогие классы ввели непонятно для чего.

UPD: не совсем так)

Последний раз редактировалось Rise, 13.07.2017 в 10:11.
Ответить с цитированием
  #3 (permalink)  
Старый 13.07.2017, 09:58
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Rise,
зло в этом месте (строка 5 предыдущего поста). строку комментируешь и начинает работать...
Object.setPrototypeOf(this,null);

я так полагал:
P2 наследует от P1, P1 не наследует, а получеатся, что P2 "теряется", тк
log(Object.getPrototypeOf(cl));

Цитата:
> P1 {constructor...}
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2017, 10:05
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Luca, ты прототип отрезал у объекта.
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2017, 10:27
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Rise,
я понял. только я хотел другого.
я полагал, что отрезал прототип у P1, но для P2 прототип будет P1, а получется, что отрезается полностью вместе с getProto(), хотя это же явно просписанный метод, который, как я полагал не принадлежит никакому прототипу, а является собственным...
те P2 -> P1 -> null, а получается что и getProto() отрезается...
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2017, 10:52
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Luca,
Нет, явно прописанные методы попадают в прототип, за исключением статичных.
class P {
    constructor() {
        this.kuku();
    }
    kuku() {
        alert('kuku');
    }
}
new P();

Последний раз редактировалось Rise, 13.07.2017 в 11:08.
Ответить с цитированием
  #7 (permalink)  
Старый 13.07.2017, 11:49
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

я вот о чём:
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();

куда "куку" делось? ведь я изменил ссылку на прототип сконструированный объект я не трогал
все свойства и методы при конструировании пишутся в прототип что ли?
Ответить с цитированием
  #8 (permalink)  
Старый 13.07.2017, 12:18
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от Luca
все свойства и методы при конструировании пишутся в прототип что ли?
Методы указанные в блоке class, за исключением constructor() и static ...(), пишутся в прототип. Методы и свойства указанные в constructor() через this.... пишутся в объект.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создается function Function(){} ? Cepairda Общие вопросы Javascript 0 10.02.2016 15:03
сабытие Onchange serrrgggeee Javascript под браузер 1 25.09.2014 10:11
Прототипное наследование bFree Общие вопросы Javascript 2 18.09.2012 11:20
Чем "dequeue после queue" отличается от "dequeue внутри queue". lancer jQuery 2 04.09.2012 14:47
Навесить обработчиком на кнопку метод класса TheArtem Элементы интерфейса 2 10.05.2011 22:39