В соответствии с его непрерывной записью обратной совместимости, ECMAScript 6, JavaScript по-прежнему не имеет типа class
(хотя не все это понимают). У этого есть ключевое слово class
как часть его синтаксиса class
для создания прототипов, но все еще не называется классом. JavaScript теперь не является и никогда не был классическим языком ООП. Говоря о JS в терминах класса, это либо вводит в заблуждение, либо признак еще не grokking прототипа наследования (просто сохраняя его реальным).
Это означает, что this.constructor
все еще отличный способ получить ссылку на constructor
. И this.constructor.prototype
- это способ доступа к самому прототипу. Поскольку это не Java, это не класс. Это объект-прототип, из которого был создан ваш экземпляр. Вот пример использования синтаксического сахара ES6 для создания цепочки прототипов:
class Foo {
get foo () {
console.info(this.constructor, this.constructor.name)
return 'foo'
}
}
class Bar extends Foo {
get foo () {
console.info('[THIS]', this.constructor, this.constructor.name, Object.getOwnPropertyNames(this.constructor.prototype))
console.info('[SUPER]', super.constructor, super.constructor.name, Object.getOwnPropertyNames(super.constructor.prototype))
return `${super.foo} + bar`
}
}
const bar = new Bar()
console.dir(bar.foo)
Это то, что выводится с помощью babel-node
:
> $ babel-node ./foo.js ⬡ 6.2.0 [±master ●]
[THIS] [Function: Bar] 'Bar' [ 'constructor', 'foo' ]
[SUPER] [Function: Foo] 'Foo' [ 'constructor', 'foo' ]
[Function: Bar] 'Bar'
'foo + bar'
Там у вас есть! В 2016 году в JavaScript есть ключевое слово class
, но до сих пор не существует типа класса. this.constructor
- лучший способ получить конструкторскую функцию, this.constructor.prototype
лучший способ получить доступ к самому прототипу.
numberOfSections
возвращает 0, вы должны вернуть как минимум 1, если хотите что-либо увидеть.
Подсказка: Если у вас есть только 1 раздел, вы можете опустить его, поскольку 1 - это возвращаемое значение по умолчанию.