JavaScript - 作为对象属性

时间:2011-03-17 02:54:39

标签: javascript

大家好,这是来自John Resig Advanced JavaScript http://ejohn.org/apps/learn/#23的#23,名为

  

What happens if a function is an object property.

1)关于词汇,变量武士刀是对象,对吗?如果匿名函数是它的属性,那么所谓的“使用”是什么?我认为“使用”也会被称为财产?或者“使用”也是一个对象,因为它包含一个值,即一个函数?

2)。该函数的目的是更改为:Sharp:isSharp:false?什么!this.isSharp究竟做什么?

3)当它断言!katana.isSharp时,它实际上断言了什么?那个夏普现在被设定为“假”?

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

3 个答案:

答案 0 :(得分:23)

  1. 是的,katana是一个对象(使用{ ... }表示法创建)。 “use”是对象属性的名称,其将是匿名函数(也是对象)。

  2. 该函数会反转isSharp的值(从truefalsefalsetrue)。

    < / LI>
  3. 声称isSharp是不评估为真的内容(除了undefinednullfalse,{{1等等)。在这种情况下,由于0始终是isSharptrue,因此它声称它是false

  4. 样本的要点(和冷却部分)是这一行:

    false

    首先从katana.use(); 对象(即katana部分)获取“use”属性的值。该值是之前的匿名函数。然后,执行该函数(即katana.use部分)。非常酷的部分是它代表()对象执行 - 这意味着匿名函数中的katana是对this对象的引用当它被这样称呼时。

答案 1 :(得分:1)

1)Katana是一个对象。 Katana.use是一个功能。它是一个包含函数值的属性。它包含的值恰好是一个匿名函数。

区别在于Katana.useKatana的属性,Katana.use的值是函数。 useKatana上定义的密钥,因为Katana["use"]也有效。

2)设置isSharp为NOT isSharp所以要么为true - &gt;假或假 - &gt;真

3)断言正在说katana.isSharp === false它应该是,因为它是原始的,但后来设置为假。

答案 2 :(得分:1)

  1. use是对象katana的属性。
  2. !this.isSharp将否定this.isSharp的值。如果isSharp为true,则返回false,否则返回false。
  3. 断言检查布尔结果的结果是否为真。如果结果为false,则断言失败。