我无法让它正常运行。我很接近,但事情恰恰与我需要它们相反。任何有关这方面的帮助,也许对我做错了什么更多的解释将不胜感激。谢谢!!
我获得了一个函数checkOut
和两个对象book1
和book2
。
function checkOut() {
this.available = !this.available;
return `"${this.title}" is ${this.available ? '' : 'not '}available for check-out.`;
}
var book1 = {
title: 'One Fish, Two Fish, Red Fish, Blue Fish',
author: 'Dr. Seuss',
available: false,
checkOut: checkOut
};
var book2 = {
title: "Oh, the Places You'll Go!",
author: 'Dr. Seuss',
available: false
};
var book2CheckOut = checkOut.bind(book2);
console.log(book2CheckOut);
var book2CheckOut2 = book1.checkOut.apply(book2);
console.log(book2CheckOut2);
我首先应该在checkOut
上运行book2
函数并将其保存到变量book2CheckOut
。
以下是我正在尝试的内容:
var book2CheckOut = checkOut.bind(book2)
这应该给我字符串"Oh, the Places You'll Go! is available for check-out."
但我得到"Oh, the Places You'll Go! is not available for check-out."
然后我应该在book1
checkOut函数上使用.apply()方法,使用book2
作为参数运行它。将其保存为变量book2CheckOut2
。
以下是我正在尝试的内容:
var book2CheckOut2 = book1.checkOut.apply(book2)
这应该为我提供字符串"Oh, the Places You'll Go! is not available for check-out."
,而是给我"Oh, the Places You'll Go! is available for check-out."
答案 0 :(得分:1)
我首先应该在
checkOut
上运行book2
函数并将其保存到变量book2CheckOut
。以下是我正在尝试的内容:
var book2CheckOut = checkOut.bind(book2)
var book2CheckOut = checkOut.apply(book2);
你可以使用bind
,但你想要调用结果,例如:
var checkOutBook2 = checkOut.bind(book2);
var book2CheckOut = checkOutBook2();
或
var book2CheckOut = checkOut.bind(book2)();
...但如果您不打算继续使用它,那么创建该功能毫无意义。
然后我应该在
.apply()
函数上使用book1 checkOut
方法,使用book2
作为参数运行它。将其保存为变量book2CheckOut2
。以下是我正在尝试的内容:
var book2CheckOut2 = book1.checkOut.apply(book2)
一旦你的第一部分正确(因为第一个调用翻转了available
标志),这样就可以了。请注意,它与checkOut.apply(book2)
完全相同,您只是从book1
上的属性获取函数引用,而不是从范围内标识符checkOut
获取。
完整序列:
function checkOut() {
this.available = !this.available;
return `"${this.title}" is ${this.available ? '' : 'not '}available for check-out.`;
}
var book1 = {
title: 'One Fish, Two Fish, Red Fish, Blue Fish',
author: 'Dr. Seuss',
available: false,
checkOut: checkOut
};
var book2 = {
title: "Oh, the Places You'll Go!",
author: 'Dr. Seuss',
available: false
};
var book2CheckOut = checkOut.apply(book2);
console.log(book2CheckOut);
var book2CheckOut2 = book1.checkOut.apply(book2);
console.log(book2CheckOut2);
或者我们随后调用bind
替代方案:
function checkOut() {
this.available = !this.available;
return `"${this.title}" is ${this.available ? '' : 'not '}available for check-out.`;
}
var book1 = {
title: 'One Fish, Two Fish, Red Fish, Blue Fish',
author: 'Dr. Seuss',
available: false,
checkOut: checkOut
};
var book2 = {
title: "Oh, the Places You'll Go!",
author: 'Dr. Seuss',
available: false
};
var checkOutBook2 = checkOut.bind(book2);
var book2CheckOut = checkOutBook2();
console.log(book2CheckOut);
var book2CheckOut2 = book1.checkOut.apply(book2);
console.log(book2CheckOut2);