I got a strange problem when I try to understand the code in Javascript: The Good Parts. I am trying to use console.log () to print something, but I just get a TypeError, my code is here:
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);
return function(){
return method.apply(that,args.concat(slice.apply(arguments,[0])));
};
});
var x=function(){
return this.value;
}.bind({value:666});
console.log(x());
Run codeHide resultand an error message appears:
/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
It is so interesting when I run the fragment in stackoverflow, it works as I expected ... So, it seems that there are some errors in my native environment?
I'm trying to use fs to save console.log to a file to find out what is actually in my code, I change the code to:
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));
return function(){
return method.apply(that,args.concat(slice.apply(arguments,[0])));
};
});
var x=function(){
return this.value;
}.bind({value:666});
console.log(x());
and in a.txt:
function (){
return method.apply(that,args.concat(slice.apply(arguments,[0])));
}
So surprisingly, console.log becomes the returned object ... I was completely confused. I tried node 6.9.1 and 4.6.1, and got the same result. And I use nvm to control my version of node