JavaScript - функция как свойство объекта

Привет всем, это # ​​23 от John Resig Advanced JavaScript http://ejohn.org/apps/learn/#23, называемый

What happens if a function is an object property.

1) относительно словаря, переменная катана является объектом, верно? Если анонимная функция является ее свойством, то что называется "использование"? Я думал, что "использование" было бы также названо собственностью? или "использует" также объект, потому что он содержит значение, а именно функцию?

2). Является ли цель функции изменять isSharp: true to isSharp: false? Что это делает? This.isSharp точно делает?

3) Когда он утверждает! katana.isSharp, что он на самом деле утверждает? что isSharp теперь настроен на "false"?

var katana = {
  isSharp: true,
  use: function(){
    this.isSharp = !this.isSharp;
  }
};
katana.use();
assert( !katana.isSharp, "Verify the value of isSharp has been changed." );

Ответы

Ответ 1

  • Да, katana - это объект (созданный с использованием обозначения { ... }). "use" - это имя свойства объекта, значением которого будет анонимная функция (которая также является объектом).

  • Функция инвертирует значение isSharp (от true до false или false до true).

  • Утверждается, что isSharp - это то, что не оценивается как true (это почти все, кроме undefined, null, false, 0 и т.д.). В этом случае, поскольку isSharp всегда либо true, либо false, он утверждает, что он false.

Основная точка (и классная часть) образца - это строка:

katana.use();

Это сначала извлекает значение свойства use из объекта katana (это часть katana.use). Значение - анонимная функция от ранее. Затем выполняется эта функция (это часть ()). Действительно классная часть состоит в том, что она выполняется от имени объекта katana, что означает, что this в анонимной функции является ссылкой на объект katana, когда он вызвал этот путь.

Ответ 2

1) Katana - это объект. Katana.use - функция. Свойство, которое содержит функцию как значение. Значение, которое оно содержит, является анонимной функцией.

Различие заключается в том, что Katana.use является свойством Katana и что значение Katana.use является функцией. use - это ключ, определенный на Katana, так как Katana["use"] также работает.

2) Он устанавливает isSharp для NOT isSharp, поэтому либо true → false, либо false → true

3) утверждение говорит katana.isSharp === false, которое должно быть, поскольку оно было первоначально истинно, но затем установлено в false.

Ответ 3

  • use является свойством объекта katana.
  • ! this.isSharp будет отрицать значение this.isSharp. Ex if isSharp true, он вернет false, иначе он вернет false.
  • Утверждение проверяет, является ли результат логического результата истинным. Если результат ложный, утверждение не выполняется.