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.
- Утверждение проверяет, является ли результат логического результата истинным. Если результат ложный, утверждение не выполняется.