为什么拨打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>
答案 0 :(得分:2)
this
取决于您调用该函数的如何。您在全局对象的上下文中调用该函数,其中不存在属性sayName
。您需要明确设置上下文:
bar.ask(foo.sayName.bind(foo));
bind
当您致电this
时,请确保sayName
内的foo
为fn
。