Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 114 из 114 · 8 мин
__proto__, __defineGetter__, __defineSetter__, __lookupGetter__, __lookupSetter__, RegExp.prototype.compile, arguments и caller у функций.
obj.__proto__ = evil — и всё наследование моё! Хе-хе.
Это старые служебные свойства. У каждого есть современная замена — понятная и безопасная.
__proto__obj.__proto__ читает и меняет прототип. Замены: Object.getPrototypeOf и Object.setPrototypeOf; в литерале { __proto__: p } ещё допустим.const base = { hi() { return "привет"; } };
const o = { __proto__: base };
console.log(o.hi(), o.__proto__ === Object.getPrototypeOf(o));__defineGetter__ · __defineSetter__ · __lookupGetter__ · __lookupSetter__get/set в литерале и классе, Object.defineProperty, Object.getOwnPropertyDescriptor.const cup = { ml: 350 };
cup.__defineGetter__("liters", function () { return this.ml / 1000; });
console.log(cup.liters, typeof cup.__lookupGetter__("liters"), cup.__lookupSetter__("liters"));
cup.__defineSetter__("liters", function (v) { this.ml = v * 1000; });
cup.liters = 0.45;
console.log(cup.ml);RegExp: compile()re.compile("новый", "флаги") меняет шаблон существующего объекта. Замена — просто создать новый: new RegExp(…).const re = /блокнот/;
re.compile("пенал", "i");
console.log(re.test("ПЕНАЛ"), re.source);arguments · caller у функцийfn.arguments и fn.caller из старых движков. У строгих функций, стрелок и классов обращение к ним бросает TypeError. Замены: параметры ...rest и стек ошибки для отладки."use strict";
function f() {}
try { f.caller; } catch (e) { console.log(e.name); }Двойные подчёркивания в именах — сигнал: метод устарел, ищи современную замену.
Перепиши makeBox(ml) без __defineGetter__ и __proto__: верни объект с прототипом base (через Object.create) и обычным геттером liters.
Выберите один ответ.
Чем заменить чтение obj.__proto__?
Проверяем состояние обучения…