2011-03-17 131 views
15

嘿大家,这是23号从约翰Resig的JavaScript高级http://ejohn.org/apps/learn/#23,叫关于词汇JavaScript的 - 功能作为对象属性

What happens if a function is an object property.

1),变量武士刀是对象,对?如果匿名函数是它的属性,那么称为“使用”的是什么?我认为“使用”也会被称为财产?或者是“使用”也是一个对象,因为它包含一个值,即一个函数? 2)。该函数的目的是改变isSharp:true to isSharp:false? What!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."); 

回答

20
  1. 是,katana是一个对象(使用{ ... }符号创建)。 “使用”是其将为匿名功能(这也是一个对象)的对象的属性的名称。

  2. 功能反转的isSharp(因此从truefalsefalsetrue)的值。

  3. 据断言isSharp是一些东西,不计算为真(这几乎是一切,除了undefinednullfalse0等)。在这种情况下,由于isSharp始终为truefalse,它声称它是false

样品的主要点(和冷却部分)是这一行:

katana.use(); 

这个第一获取的“使用”属性的从katana对象的值(这是katana.use部) 。该值是之前的匿名函数。然后,执行该功能(即()部分)。真正酷的是,它是执行代表katana对象的 - 这意味着在匿名函数this是对katana对象的引用时,这就是所谓的这种方式。

+0

它的断言isSharp是“falsy”!谬误和不真实(明显)不同。 – Raynos 2011-03-17 03:02:33

+0

@Raynos:呃,是的,这就是为什么我把“不真实”而不是“不真实”“。如果你将true定义为“不是假的东西”,这是有道理的:-)我会让它更模糊,谢谢指出 – Cameron 2011-03-17 03:06:55

+0

非常感谢。你说很酷的部分是它是代表Katana对象执行的。为什么它很酷?创造一些实际优势吗?如果是这样,它给了什么实际优势? – mjmitche 2011-03-17 03:13:24

1

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

区别在于Katana.useKatana的属性,并且Katana.use的值是一个函数。 useKatana上定义的关键字,因为Katana["use"]也可以使用。

2)它的设置isSharp为NOT isSharp所以无论是真实的 - >假的还是假的 - >真

3)断言是说katana.isSharp === false这应该是因为它是orginally真实的,但然后设置为false。

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