• Как исправить ошибку при декларации графики в Typescript?

    @twoone
    Для объявления пользовательских деклараций в корне проекта принято создавать директорию types, в которой для каждого покета создаетя поддиректоория содержащая файл index.d.ts. Имя поддиректории задается исходя из име пакета. В вашем случаи будет так ./types/svg/index.d.ts

    Для декларирования расширения достаточно объявления безтелесной декларации -
    declare module "*.svg";

    Осталось лишь указать путь до директории types вtsconfig.json в массиве "typeRoots": ["./types"]

    Для компилятора этого достаточно. Что косается поля include, по оно содержит массив путей для файлов участвующих в компиляции и в большинстве случаев объявляется совместно с полем exclude. В паре они помогают оптимизировать процесс компиляции.
    Ответ написан
    1 комментарий
  • В чём разница между Array и Array.prototype?

    @undefined_title
    Array - Функция конструктор которая нужна для создания массивов.
    Array.prototype - Объект прототип, с набором методов, нужен для реализации прототипного наследования, к тому же имеется исключительно у функций, по умолчанию там храниться поле constructor, которое хранит ссылку на класс который создал этот объект.
    При создании объекта через оператор new в том числе и массива, объекту присваивается .__proto__ = Array.prototype. __proto__, это и есть сам прототип, объект хранилище методов, в нем ищется поле когда не находиться у самого объекта.
    Ответ написан
    Комментировать
  • В чём разница между Array и Array.prototype?

    Stalker_RED
    @Stalker_RED
    let a = new Array()
    let b = new Array()
    let c = new Array()
    let d = new Array()
    // объектов может быть много, с ращзными данными
    // и с разными методами
    a.hello = ()=>console.log('Yarrr!') // теперь у объекта "a" есть новый метод
    a.hello() // -> Yarrr!      его можно вызвать
    // но если сделать b.hello() - будет ошибка
    
    
    console.log('is same object?', a === b) // -> false объекты разные
    console.log('is same prototype?', a.__proto__ === b.__proto__) // а прототоип одинаковый (общий)
    
    // но при этом у каждого из них есть .length или .concat()
    // потому что эти методы прописаны в прототипе
    console.log(a.__proto__)
    a.__proto__.tost = ()=>console.log('test') // а этот метод добавился всем
    b.tost() // -> test
    Ответ написан
    Комментировать
  • В чём разница между Array и Array.prototype?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Array - функция
    Array.prototype - объект

    function f() {}
    var o = new f();
    console.log(o.x); //undefined
    f.prototype.x = 123;
    console.log(o.x); //123
    var e = new f();
    console.log(e.x); //123
    e.x = 234;
    console.log(e.x); //234
    console.log(o.x); //123
    f.prototype.x = 555;
    console.log(e.x); //234
    console.log(o.x); //555
    console.log(o === e); //false
    console.log(o.__proto__ === e.__proto__); //true
    console.log(o.__proto__ === f.prototype); //true
    console.log(o instanceof f); //true

    Когда вы проверяете свойство объекта, то сначала оно ищется в самом объекте, и если его нет, то в прототипе. В самом объекте хранятся только его собственные свойства. А в прототипе хранятся свойства всех объектов данного класса. Если вы добавите свойство в прототип, то оно появится у всех объектов данного класса (если у них нет собственного свойства с таким же именем, которое будет перекрывать). Конечно, сам прототип тоже можно поменять, но это уже отдельная история. Можно много чего сделать, используя прототипы.

    //Бонус
    Array.prototype.couple = function(){return this[0] + this[1]};
    [3,4,5].couple(); //7
    Ответ написан
    Комментировать
  • Почему выражение alert(20e-1['toString'](2)) выдает 10?

    @robbey81
    20e-1 => 20 умножаем на 10 в -1 встепени => 20 * 0,1 = 2;
    ['toString'](2) - преобразует число в строку по заданной системе исчисления (в данном случае 2 - двоичная система)
    2['toString'](2) => "10"
    Ответ написан
    Комментировать
  • Как подсветить активную якорную ссылку?

    Предложу свой вариант (для точности переключения нужно поиграть со значениями top и bottom)
    jsfiddle.net/bonilka/p7sgwg4L
    Ответ написан
    7 комментариев
  • Как подсветить активную якорную ссылку?

    creativeworm
    @creativeworm
    function scroll_active() {
    
            /* вычисляем значения прокрутки страницы по вертикали */
    
            var window_top = $(window).scrollTop();
    
            /* вычисляем положение якорей на странице от начала страницы  по вертикали*/
    
            var menu_top = $('a[name="menu"]').offset().top -10;
    
            var gallery_top = $('a[name="gallery"]').offset().top -10;
    
            /* раздел «Контакты»  у меня на странице расположен самым последним разделом, и небольшой, поэтому если контаты уже отобразались на странице, тогда  активирую пункт меню «Контакты»  */
    
            var contacts_top = $('a[name="contacts"]').offset().top -  $(window).height() + 180;
    
            /* Переключатель активного пункта меню в зависимости от положения на странице, условии написаны от последнего якоря на странице, до первого */
    
            /* если на экране отображаются раздел «Контакты»*/
    
            if (window_top > contacts_top) {
    
                    $(".main_menu li").removeClass("active");
    
                    $('a[href="#contacts"]').parent().addClass("active");
    
                    }
    
            /* если не отображается раздел «Контакты», но страницу прокрутили  ниже якоря третьего раздела*/
    
            else if (window_top > gallery_top) {
    
                    $(".main_menu li").removeClass("active");
    
                    $('a[href="#gallery"]').parent().addClass("active");
    
                    }
    
            /* если выше третьего, но ниже якоря второго раздела*/
    
            else if (window_top > menu_top) {
    
                    $(".main_menu li").removeClass("active");
    
                    $('a[href="#menu"]').parent().addClass("active");
    
                    }
    
            /* если не подходят условия предыдущие активируем первый пункт меню*/
    
            else {
    
                    $(".main_menu li").removeClass("active");
    
                    $('a[href="#page_top"]').parent().addClass("active");
    
                    }
    
    }
    
    jQuery(function()
    
    {
    
            jQuery(window).scroll(scroll_active);
    
    });
    Ответ написан
    3 комментария