Comments 9
Кто там следующий в очереди постить статью про this? Я тоже хочу.
м, this в javascript... наверное, это единственный язык, в котором this означает не исполняемый объект (за исключением замыканий, примем что они эфемерны), а может быть вообще всё что угодно, и вызывая из одного метода this.другойМетод, нельзя быть уверенным, что это сработает именно так, как ожидается: приходится использовать другие конструкции.
з.ы. я, конечно, понимаю, что язык изначально объектный (не объектно-ориентированный) и задумывался как очень простой язык, но - это не повод.
з.з.ы. я, конечно, понимаю, что недавно наконец завезли классы, но опять же но. скорее, нам нужен совсем другой язык для веба, и даже желательно не надстройки под него.
В итоговой блок-схеме неправильно обрабатывается редкий (и в общем-то бесполезный для "практического программирования", но тем не менее) кейс борьбы приоритетов между new и bind. На самом деле new - сильнее:
(function() {
'use strict';
function f() {
console.log(this.x);
}
f.prototype.x = 'proto';
f.call({x: 'call'}); // call подставляет свой this
const bound = f.bind({x: 'bound'});
bound.call({x: 'call'}); // bind сильнее чем call
new bound(); // new игнорирует bind
})();
В консоли будет call, bound, proto, причем независимо от наличия 'use strict'
Философия ключевого слова super и связанного с ним "домашнего объекта" хорошо разобрана в Учебнике
Блок схема очень похожа на схему из видео, где Мурыч объясняет про this )
Душно и бесполезно, но мне понравилось, спасибо :D
Спецификация, спецификация, спеуификация...

Подскажите, почему у меня на выходе получается не undefined, а просто пустой объект
Все про this в JavaScript