当我尝试理解Javascript中的代码时,我遇到了一个奇怪的问题:好的部分。我尝试使用console.log()打印一些东西,但我得到TypeError,我的代码在这里:
Function.prototype.method=function(name,func){
this.prototype[name]=func;
return this;
}
Function.method('bind',function(that){
var method=this;
var slice =Array.prototype.slice;
var args=slice.apply(arguments,[1]);
console.log(that);//error: console.log is not a function
return function(){
return method.apply(that,args.concat(slice.apply(arguments,[0])));
};
});
var x=function(){
return this.value;
}.bind({value:666});
console.log(x());
并且错误消息是打击:
/home/wz/code/js/c.js:14
console.log(that);//error: console.log is not a function
^
TypeError: console.log is not a function
at Function.<anonymous> (/home/wz/code/js/c.js:14:13)
at new Console (console.js:34:23)
at console.js:100:18
at NativeModule.compile (bootstrap_node.js:497:7)
at Function.NativeModule.require (bootstrap_node.js:438:18)
at get (bootstrap_node.js:254:34)
at Function.<anonymous> (/home/wz/code/js/c.js:14:5)
at Object.<anonymous> (/home/wz/code/js/c.js:23:3)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
Shell 已返回1
当我在stackoverflow中运行代码段时,它非常有趣,它可以正常工作......所以我的本机环境中似乎有一些错误?
我尝试使用fs将console.log保存到文件中以查看我的代码中实际存在的内容,我将代码更改为:
fs=require('fs');
Function.prototype.method=function(name,func){
this.prototype[name]=func;
return this;
}
Function.method('bind',function(that){
var method=this;
var slice =Array.prototype.slice;
var args=slice.apply(arguments,[1]);
fs.writeFile('a.txt',String(console.log));
//console.log(that);//error: console.log is not a function
return function(){
return method.apply(that,args.concat(slice.apply(arguments,[0])));
};
});
var x=function(){
return this.value;
}.bind({value:666});
console.log(x());
并在a.txt中:
function (){
return method.apply(that,args.concat(slice.apply(arguments,[0])));
}
令人惊讶的是,console.log成为了返回的对象......我完全糊涂了。 我尝试了节点6.9.1和4.6.1,得到了相同的结果。我使用nvm来管理我的节点版本
答案 0 :(得分:0)
您在代码中的某处覆盖console.log = console.log || function(message) { alert(message);};
。为避免Monkey patching,您可以使用构造:
list-style-type: none
使用这种结构,您不会覆盖现有功能,只会添加新方法或属性。