【发布时间】:2019-07-23 21:28:02
【问题描述】:
我想将 getter/setter 传递给函数,但不能。甚至可以在 JS 中做(或模仿)这样的事情吗?
我尝试使用 getter/setter 调用一个函数,但它(很明显)不起作用,我尝试了“应用”和“调用”,但它仍然(不知何故)不起作用。
function foo(x, y) {
var i;
for (i = 0; i < 5; ++i)
console.log(x, y);
}
var args = [];
Object.defineProperties(args, {
"0": {
"set": function() { },
"get": Math.random
},
"1": {
"set": function() { },
"get": function() { return new Date().getMilliseconds(); }
}
});
foo.apply(this, args);
预期 5 个不同的结果,却得到 5 个相同的结果。
【问题讨论】:
-
我可能会产生误解,但在我看来,当您通过
apply方法将args传递给foo时,该程序将生成x和y的随机值- 但是一旦进入foo,这些参数是固定的,foo只是打印出这些固定值 5 次。连续多次执行foo.apply(null, args)会更有趣(这里foo内部的循环无关紧要),然后我猜你每次都会得到不同的结果。 -
顺便说一句,在 ES6 中调用
foo(...args)比使用apply更惯用
标签: javascript arguments descriptor function-call propertydescriptor