为什么会员未定义?

时间:2016-01-10 08:17:28

标签: javascript inheritance undefined member prototypal-inheritance

为什么拨打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>

1 个答案:

答案 0 :(得分:2)

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

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

bind当您致电this时,请确保sayName内的foofn