提问人:Beto 提问时间:7/21/2022 最后编辑:ReynoBeto 更新时间:7/21/2022 访问量:127
此 JavaScript 代码为 bar、baz 和 biz 函数调用返回什么?
What does this JavaScript code return for bar, baz, and biz function calls?
问:
学习 JavaScript 基础知识,对函数调用的返回内容感到困惑。 我有一个想法 f.bar 返回 7,因为当创建 f 对象时,它可以访问具有“this”关键字的 Foo 函数。此外,我相信 f.baz 返回错误,因为此函数仅在本地可用,并且不使用“this”关键字,这使得它在 Foo 之外不可用。f.biz 我很困惑,但我知道 Prototype 关键字允许继承 Foo 属性。
每个函数调用的解释会很棒,谢谢大家!
var Foo = function(a){
this.bar = () => {
return a;
}
var baz = function(){
return a;
}
Foo.prototype = {
biz: () => {
return this.bar();
}
}
}
var f = new Foo(7);
f.bar();// what does this return?
f.baz(); // what does this return?
f.biz(); // what does this return?
答:
1赞
FZs
7/21/2022
#1
就像现在一样,只有该函数才能按预期工作。bar
该函数位于局部变量中,因此它只能在函数内部访问,而不能作为(变量和实例属性 () 未以任何方式连接)。baz
Foo
baz
this.baz
this.whatever
的情况有点复杂。通常,这或多或少是你创建原型方法的方式,但你在错误的地方做了。它应该在函数之外,因为现在的方式是:biz
- 每次调用时重新分配(不必要)
new Foo()
- 仅在创建当前实例后分配,因此它只会在下一个实例上生效(如果您在其中使用(您不应该使用),您会发现它始终具有上一个调用)
a
a
当你想“让JS设置”时,你也不想使用箭头函数(箭头函数从定义它们的地方复制它们)。this
this
所以,要制作工作,你必须这样做:biz
var Foo = function(a){
this.bar = () => {
return a;
}
}
Foo.prototype = {
biz: function (){
return this.bar();
}
}
var f = new Foo(7);
console.log(f.bar());
console.log(f.biz());
下一个:了解扩展和方法覆盖
评论
console.log()
->console.log(f.bar());
Foo.prototype =
Foo
Foo