JavascriptのThe Good Partsのコードを理解しようとすると、私は奇妙な問題に遭遇しました。console.logはnodejsの関数ではありません。6.9.1
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());
とエラーメッセージが打撃です::私は何かを印刷するにconsole.log()を使用しようが、私はちょうどTypeError例外を取得し、私のコードはここにある
/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でスニペットを実行するととても面白いです...私の母国の環境にいくつかのバグがあるようですか?
私は実際にそれは私のコードであり、私は、コードを変更するかを確認するためにファイルにはconsole.logを保存するためにFSを使用しよう:
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を使用します。
ちょうど注記:node.js内でこのように 'bind'をpolyfillする必要はありません。ネイティブでサポートしています。 –
'console'自体の価値は何ですか? – damd
@damd console.logをconsoleに変更し、a.txtに「object object」があります。 – wangzhe