console.log不是nodejs 6.9.1中的函数

时间:2016-11-15 10:14:39

标签: javascript node.js

当我尝试理解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来管理我的节点版本

1 个答案:

答案 0 :(得分:0)

您在代码中的某处覆盖console.log = console.log || function(message) { alert(message);};。为避免Monkey patching,您可以使用构造:

list-style-type: none

使用这种结构,您不会覆盖现有功能,只会添加新方法或属性。