写一个print() 函数,能够通过如图上不同的调用,显示不同的结果。
谁知道怎么写的?!
function Print () {
function createAPrinter () {
return {
Print: function printA () {
console.log('aaaaa');
}
}
}
createAPrinter.Print = function () {
return function printB () {
console.log('bbbbb');
}
}
return createAPrinter;
}
首先我们声明这样两个函数:
function printB () {
console.log('bbbbb');
}
function printA () {
console.log('aaaaa');
}
看一看题目,你会发现:
Print().Print() === printB
Print()() === printA
于是我们往前推一步,再两个函数,他们分别返回 printB 和 printA:
function createPrintB () {
return printB;
}
function createPrintA () {
return printA;
}
看看上面我们发现的等式,你会发现:
Print().Print === createPrintB
Print() === createPrintA
// 你还会发现
createPrintA.Print === createPrintB
到这里你就可以写出:
function Print () {
function createPrintA () {
return function printA () {
console.log('aaaaa');
}
}
function createPrintB () {
return function printB () {
console.log('bbbbb');
}
}
createPrintA.Print = createPrintB;
return createPrintA;
}
然后整理一下就是我上面的答案了。
希望对你有帮助
var Print=new Proxy(function(){},{
apply:function(target){
target.index=~~target.index+1;
if(target.index %3 ==0){
console.log(String.fromCharCode(target.index/3+96).repeat(3));
}
return Print;
}
});
Print.Print=Print;
Print().Print()();
Print()().Print();
function Print() {
function a() {
return {
Print() {
console.log('aaaaa')
}
}
}
a.Print = () => () => console.log('bbbbb')
return a
}
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
5 回答2.2k 阅读
3 回答1.7k 阅读✓ 已解决
5 回答812 阅读
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决