0

为什么要拨打alert()弹出undefined?我猜测,Javascript没有使用我认为是的this。我怎样才能修复代码,同时仍然使它看起来像非原型继承代码?为什么会员未定义?

<!DOCTYPE html> 
<html> 
    <head><title>Help</title> 
     <script type="text/javascript"> 

      var Foo = function (myName) { 
       this.myName = myName; 
      } 

      Foo.prototype.sayName = function() { 
       alert(this.myName); 

      } 

      var foo = new Foo("I am foo"); 

      var bar = { 
       ask: function (fn) { 
        fn(); 
       } 
      }; 

      function doIntroductions() { 
       bar.ask(foo.sayName); 
      } 

     </script> 
    </head> 
    <body onload="doIntroductions();"> 
    </body> 
</html> 

回答

2

this取决于如何调用该函数。您在全局对象的上下文中调用该函数,其中不存在属性sayName。您需要明确设置背景:

bar.ask(foo.sayName.bind(foo)); 

bind可以确保this内的sayNamefoo当你调用fn