When you assign a variable like this...
var genderTeller = person1.sayGender;
...you lose the context of the person1
object, and the function's this
points to the global object (window
in a browser), instead of the instantiated person1
object.
You get undefined
because the gender
property does not exist on window
, and referencing an undefined property on an object returns undefined
in JavaScript.
You can fix that in modern browsers with bind()
...
var genderTeller = person1.sayGender.bind(person1);
...or jQuery has a method too called proxy()
.
var genderTeller = $.proxy(person1.sayGender, person1);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…