在generator.prototype.__proto__.math
,函数的参数设置e = 0
。但是,在调用gen.math(1)
时,e
的值似乎设置为1而不是0。初始的e = 0
被gen.math(1)
覆盖还是还有其他东西? ?
function * generator() {
yield 1;
}
generator.prototype.__proto__.math = function(e = 0) {
return e * Math.PI;
}
generator.prototype.__proto__;
const gen = generator();
gen.math(1); // 3.141592653589793
答案 0 :(得分:1)
我认为这种行为与生成器完全无关。您的代码本质上等同于
const math = function(e = 0) {
return e * Math.PI;
};
math(1);
您为e = 0
使用的语法是Default parameters的语法。它不会覆盖提供的参数。如果没有提供参数,它所做的只是提供值。所以你可以做
math()
并获得0
。
如果您想忽略参数值,可以在我们的函数体中轻松实现。如果情况比较复杂,则可能需要使用bind
来设置参数值。
答案 1 :(得分:1)
首先要回答您的问题,function(e = 0)
定义了一个默认参数为e = 0的函数。这意味着如果未提供e
,它将默认为0
的值。例如,当您仅致电math()
时。
您正在呼叫math(1)
,这将传递e
的值-因此默认设置将不适用。 e
将只是传递的值,即1
。
我还想提醒您修改__proto__
-您设置的行:
generator.prototype.__proto__.math = function(e = 0);
实际上是在所有math
的{{1}}上定义prototype
。我想,您可能不打算发生这种情况。
有关更多信息,请参见__proto__的文档,请注意顶部的所有红色大框。 :)