Задать вопрос
  • В __proto__ хранится объект или ссылка?

    roswell
    @roswell
    и швец, и жнец, и на дуде игрец
    1. В __proto__ ссылка на "родительский" объект.
    1.1. Да.
    2. Да.
    Ответ написан
    4 комментария
  • Зачем нужен Object.create?

    rockon404
    @rockon404
    Frontend Developer
    JS мультипарадигмальный язык. Object.create это, более характерная прототипному программированию, альтернатива оператора new:
    const human = {
      planet: 'Earth',
    }
    
    const tom = Object.create(human);
    tom.name = 'Tom';
    tom.age = 32;
    tom.country = 'UK';
    
    console.log(tom.planet);
    
    // => Earth


    Ключ planet при этом не создается в новом объекте, а берется при вызове tom.planet из прототипа human, пока не будет переназначен в tom.
    5a291ca5a1b64550694668.png
    И если мы изменим прототип human после создания tom, то:
    const human = {
      planet: 'Earth',
    }
    
    const tom = Object.create(human);
    tom.name = 'Tom';
    tom.age = 32;
    tom.country = 'UK';
    
    human.planet = 'Mars';
    
    console.log(tom.planet);
    
    // => Mars


    но если мы переназначим tom.palnet, то:
    const human = {
      planet: 'Earth',
    }
    
    const tom = Object.create(human);
    tom.name = 'Tom';
    tom.age = 32;
    tom.country = 'UK';
    
    tom.planet = 'Jupiter';
    human.planet = 'Mars';
    
    console.log(tom.planet);
    
    // => Jupiter
    
    console.log(human.planet);
    
    // => Mars


    $.extend в свою очередь при вызове:
    const human = {
      planet: 'Earth',
    }
    
    const tom = $.extend({}, human);
    tom.name = 'Tom';
    tom.age = 32;
    tom.country = 'UK';

    создаст новый объект tom включающий в себя ключи human без прототипирования.
    5a291cb3705c0343579580.png
    Надеюсь разница понятна.
    Ответ написан
    Комментировать
  • Почему у созданных объектов нет методов от Object?

    space2pacman
    @space2pacman
    Просто царь.
    Ведь при простом создании объекта у него прототипом становится Object

    Не совсем
    Ведь при простом создании объекта у него прототипом становится Object.prototype


    Но никто не мешает сделать следуюшие)

    Object.prototype.keys = Object.keys
    
    var o = {x:1,y:2};
    o.keys(o) // ["x","y"]


    keys, defineProperty и прочие их нет в прототипе от того и не переносятся.
    Ответ написан
    Комментировать
  • Почему у созданных объектов нет методов от Object?

    alvvi
    @alvvi
    export default apathy;
    Потому что если посмотреть в консоль, станет понятно, что прототип обычных объектов - это не Object, а Object.prototype, Object же не является чьим либо прототипом, Ojbect - это нативный конструктор (то есть то что внутри него - нативный код браузера, не JS).

    Но если предположить что это все же JS, выглядело бы это как-то так:
    const objectPrototype = {
      toString: () => 'string!'
      // и другие методы которые мы хотим иметь на всех объектах
    }
    
    function Object() { 
      /* здесь магия нативного кода */ 
    }
    Object.prototype = objectPrototype
    
    /*
    * Здесь мы по сути определяем "статический" метод, он будет доступен 
    * только на конструкторе Object и никогда не попадет
    * в Object.prototype, следовательно новые объекты его не унаследуют
    */
    Object.keys = obj => { 
      // делаем что-то и возвращаем ключи 
    }
    
    const obj = new Object()
    console.log(obj.__proto__) // {toString: ƒ}
    Ответ написан
    Комментировать
  • Почему у созданных объектов нет методов от Object?

    kshshe
    @kshshe
    Frontend developer
    keys, call, apply и т.д. -- статические методы класса Object. Они доступны у самого класса, но отсуствуют в прототипе его экземпляров.
    Ответ написан
    Комментировать
  • Почему у созданных объектов нет методов от Object?

    Это статические методы класса Object их невозможно вызвать для инстанса класса.
    https://developer.mozilla.org/en-US/docs/Web/JavaS...
    https://jsfiddle.net/wbyrqjus/
    Ответ написан
    Комментировать
  • Как работает это код?

    Вы инициализировали переменные foo и bar.
    Дальше, когда вы задаете свойство объекту object, то в качестве ключа берете foo. То есть:
    object[foo] = "value"; // foo = {unique_prop: 1}
    Возможно вы хотели свойство foo, то есть вот так:
    object["foo"] = "value";

    Но в вашем примере вы в качестве ключа используете объект, а объект принимает в качестве ключа только строки. Поэтому ваш объект преобразуется в строку и после преобразования получается вот так:
    object["[object Object]"] = "value";
    Значит ваш object будет такой:
    var object = {
    "[object Object]":"value"
    };

    И собственно, когда вы делаете console.log, то объект bar тоже преобразуется в строку и строка принимает вид:
    console.log(object["[object Object]"]);
    Ответ написан
    Комментировать
  • Как работает это код?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Вот почему:
    5be81cc1bc5f3617457314.png

    По вашей же ссылке:
    Имена свойств могут быть строками. Это значит, что нестроковые объекты могут быть использованы как ключи в объекте. Любой нестроковой объект, включая числа, приводится к строке через метод toString.
    ...
    Также выводит "value", поскольку foo и bar конвертируются в строку. В SpiderMonkey JavaScript движке эта строка будет "['object Object']".
    Ответ написан
    Комментировать
  • Система bitcoin дает награду только за целый блок?

    Все комиссии за включенные в блок транзакции и за сам блок достаются майнеру.

    Люди объединяются в пулы. Пул для сети выглядит как один большой майнер. Если пул нашел блок, то награда распределяется между участниками пула пропорционально их вкладу (т.е. мощность*время).

    Майнеры не имеющие отношение к пулу не получают ничего.
    Ответ написан
    3 комментария
  • Как работает это присвоение?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Можно и так
    (function() {
      var answer = 42;
    
      return function inner() {
        return answer++;
      };
    })();

    Скобки ставятся для того, чтобы интерпретатор понимал, что это функциональное выражение, а не просто функция.
    В вашем же примере, это и так стало понятно из-за присваивания функции в переменную. т.е. можно писать и так
    var getAnswer = function() {
      var answer = 42;
    
      return function inner() {
        return answer++;
      };
    }();

    но нельзя так
    function() {
      var answer = 42;
    
      return function inner() {
        return answer++;
      };
    }();

    потому, что тут уже почти обычное определение функции, это не выражение. Поэтому люди и добавляют скобки, чтобы было выражение, и тогда уже можно сразу вызвать функцию.

    По этой теме мне нравится пример с объектами.

    {} + 2; // 2
    2 + {}; // 2[object Object]

    в первом случае, чтение идет слева направо, и интерпретатор попадает на {}, что не похоже на выражение, а значит это не объект а просто блок кода. Далее идет унарный оператор + и число, выходит +2.
    Во втором случае, первым идет число а далее оператор, значит это уже выражение, и фигурные скобки будут поняты как часть выражения, а значит это объект.
    Такой пример дает понимание работы интерпретатора, и поможет вам разобраться с вашей ситуацией.
    Ответ написан
    Комментировать
  • Как работает это присвоение?

    Stalker_RED
    @Stalker_RED
    getAnswer сама становится этой функцией
    Не становится. В переменной getAnswer ссылка на функцию inner. Можно туда и что-то другое записать, вместо функции.

    var getAnswer = function() {
      var answer = 42;
    
      return function inner() {
        return answer++;
      };
    }();
    
    var anotherAnswer = getAnswer
    getAnswer = -Infinity

    dVxlVo.png

    Трюк со скобками - одна из форм записи самовызывающихся функций, они-же self-invoking functions или функциональные выражения. Делается для того, чтобы интерпретатор понял, что это не просто объявление функции, но ее еще и выполнить надо.

    Форм записи у этого трюка не одна и не две.
    Можно даже вот так: +function(){console.log('foo')}()
    Здесь унарный плюс заставляет выполнить следующую за ним строку. (но не делайте так, те кто будут это читать вас проклянут)
    Ответ написан
    Комментировать
  • Как в Notepad++ отсортировать строки по алфавиту?

    Unknown312
    @Unknown312
    Меню "Правка" -> "Операции со строками" -> "Сортировка по возрастанию"
    Ответ написан
    1 комментарий
  • Почему при многократном вызове функции нет многократно возвращаемых значений?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В консоли отображается последнее возвращённое значение.
    Функция вернула значение все 10 раз, но с ним ничего не делали. А консоль показала последнее.
    Еще пример
    >> 1, 2, 3, 4, 5;
    <– 5


    Во втором примере всё то же. Возвращенное значение ниже: undefined.
    Но перед этим 10 раз выполнился вывод в консоль через console.log().
    Ответ написан
    3 комментария
  • Почему при многократном вызове функции нет многократно возвращаемых значений?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    for(let i=0; i<10; i++){
        console.log(getTen())
    }
    Ответ написан
    Комментировать
  • Зачем вызов функции оборачивать в другую функцию?

    Softer
    @Softer
    Чтобы без труда поменять реализацию. Например выпустят разрабы нечто вроде Math.random_ex. Оно-то лучше, но не везде работает и менять везде по коду не удобно. А так - в одном месте сменил или if поставил и готово :)
    Ответ написан
    Комментировать
  • Зачем вызов функции оборачивать в другую функцию?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для краткости, понятности и красоты.
    В вашем примере одна функция вместо доступа через точку.
    Ответ написан
    1 комментарий
  • Зачем вызов функции оборачивать в другую функцию?

    AngReload
    @AngReload
    Кратко о себе
    Тут всего лишь чересчур упрощенный пример использования Math.random().
    Ответ написан
    Комментировать
  • Как обходить сайты, блокирующие AdBlock?

    @Gring76
    Я пользуюсь таким решением.

    Для связки addblock с теми сайтами где ограничивают функционал - нужно поставить к примеру для хрома
    Tampermonkey С сайта tampermonkey.net ( или из магазина приложений)

    Потом заходим
    https://github.com/reek/anti-adblock-killer#anti-a...
    И добавляем подписку на скрипты
    Subscribe from github.com

    Инсталлируем.
    Install from github.com

    Получаем
    Features

    Detect & Kill Anti-Adblockers
    Check if Anti-Adblock Killer list is installed
    Check & Notify updates
    More filters for Adblockers
    Settings
    Suggest features

    После этого тот же CNEWS больше не блокирует свои статьи при просмотре с addblocker
    Ответ написан
    1 комментарий
  • В чем смысл html-препроцессоров?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    На чистом html много страниц выглядят так:
    main_page.html
    <!DOCTYPE html>
    <html>
    <head>
        <title>Main page</title>
    </head>
    <body></body>
    </html>

    about.html
    <!DOCTYPE html>
    <html>
    <head>
        <title>About us</title>
    </head>
    <body></body>
    </html>

    contacts.html
    <!DOCTYPE html>
    <html>
    <head>
        <title>Contacts</title>
    </head>
    <body></body>
    </html>

    С помощью jade делаем так:
    each TITLE in["Main page", "About us", "Contacts"]
        html
            head
                title= TITLE
            body

    Результат тот же. Ну и конечно ответ Serj-One вполне исчерпывающий.
    Ответ написан
  • Как задать несколько классов диве с помощью Emmet?

    @valentine16px
    div.class1.class2

    Разделяешь точкой, получаешь < div class="class1 class2" > < /div >
    Ответ написан
    3 комментария