• Почему Microsoft Office в розничных магазинах стоит дешевле, чем на официальном сайте?

    Jump
    @Jump
    Системный администратор со стажем.
    но какой смысл Microsoft продавать "Офис" дешевле, чем у себя на сайте?
    А какой смысл торговцам продавать товар дешевле оптовым покупателям, чем розничным?

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

    Например программа фирмы 1с которая на их сайте стоит 20тыс, для партнера стоит 10тыс, поэтому ее можно купить у знакомого партнера за 11тыс, хотя это не приветствуется и рекомендуется продавать именно за 20тыс. Но всем пофиг на рекомендации.
    Ответ написан
    3 комментария
  • Чем отличаются плашечные цвета от триадных цветов?

    PavelK
    @PavelK
    Соответствуют краскам, которыми будет печататься файл.
    Если вкратце, то триадные цвета они смешиваются во время печати, грубо говоря обычный принтер с четырьмя цветами, который по ходу смешивает их.
    планшетные цвета - заранее смешанные цвета, грубо говоря как будто в принтер залили только эти заданные цвета заместо стандартных cmyk.
    Подробнее:
    https://helpx.adobe.com/ru/indesign/using/spot-pro...
    Ответ написан
    5 комментариев
  • Какой стандарт js выбрать для новичка?

    @DenJel
    Ecmascript 6 не исключает а только дополняет 5, за исклюением const и let ( про var можно забыть ) ну и arguments ( вместо него spread операторы ). Критичных исключений из стандарта нет. Так что ES5 полюбому учить придется. Начинай с него, периодически заглядывая в спецификацию 6.
    Ответ написан
    Комментировать
  • В __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 комментарий