5 回答
TA贡献1780条经验 获得超5个赞
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;
}
然后整理一下就是我上面的答案了。
希望对你有帮助
TA贡献1836条经验 获得超13个赞
function Print() {
var print = function () {
return {
Print: function () {
console.log("aaaaa")
}
}
}
print.Print = function () {
return function () {
console.log("bbbbb")
}
}
return print;
}
Print().Print()();
Print()().Print();
TA贡献1841条经验 获得超3个赞
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();
TA贡献1864条经验 获得超2个赞
function Print() {
function a() {
return {
Print() {
console.log('aaaaa')
}
}
}
a.Print = () => () => console.log('bbbbb')
return a
}
添加回答
举报

