Hey everyone, this is #23 from John Resig Advanced JavaScript http://ejohn.org/apps/learn/#23, called
What happens if a function is an
object property.
1) regarding vocabulary, the variable katana is the object, right? If the anonymous function is its property, then what is “use” called? I thought “use” would have also been called a property? or is “use” also an object because it contains a value, namely a function?
2). Is the purpose of the function to change isSharp: true to isSharp: false? What does !this.isSharp exactly do?
3) When it asserts !katana.isSharp, what is it actually asserting? that isSharp has now been set to “false”?
var katana = {
isSharp: true,
use: function(){
this.isSharp = !this.isSharp;
}
};
katana.use();
assert( !katana.isSharp, "Verify the value of isSharp has been changed." );
Yes,
katanais an object (created using the{ ... }notation). “use” is the name of the property of the object whose value will be the anonymous function (which is also an object).The function inverts the value of
isSharp(so fromtruetofalseorfalsetotrue).It is asserting that
isSharpis something which does not evaluate to true (this is nearly everything exceptundefined,null,false,0, etc). In this case, sinceisSharpis always eithertrueorfalse, it is asserting that it isfalse.The main point (and cool part) of the sample is this line:
This first fetches the value of the “use” property from the
katanaobject (that’s thekatana.usepart). The value is the anonymous function from before. Then, that function is executed (that’s the()part). The really cool part is that it is executed on behalf of thekatanaobject — that meansthisin the anonymous function is a reference to thekatanaobject when it’s called that way.