使用PhantomJS 1.9.x,我想在我的代码中使用console.log.bind(console)
,但由于console.log.bind
为undefined
而导致错误(console.error.bind(console)
等相同) )
PhantomJS 1.x的一个已知问题是它不支持Function.prototype.bind
。
然而即使包括bind
polyfill之后,事情也无法正常工作:
console.log(Function.prototype.bind);
// function bind(obj) { ... }
console.log(console.log.bind);
// undefined
我该如何解决这个问题?
答案 0 :(得分:3)
似乎在PhantomJS中,console
有点特别,因为它不是Function
的实例(与Chrome或Firefox相反)。因此,Function.prototype
延伸对此没有任何作用。
console.log(typeof console.log === "function");
// true
console.log(console.log instanceof Function);
// false
(可能console.log
来自不同的JavaScript上下文,此问题与myArray instanceof Array
在false
来自iframe时评估myArray
时的问题相同
要解决此问题,除了包含Function.prototype.bind
的填充之外,您还可以手动为bind
方法分配console
,如下所示:
if (!console.log.bind) {
// PhantomJS quirk
console.log.constructor.prototype.bind = Function.prototype.bind;
}
在此之后,所有控制台方法都将具有.bind()
:
console.log(console.log.bind); // function bind(obj) { ... }
console.log(console.info.bind); // function bind(obj) { ... }
console.log(console.debug.bind); // function bind(obj) { ... }
console.log(console.warn.bind); // function bind(obj) { ... }
console.log(console.error.bind); // function bind(obj) { ... }