search

Home  >  Q&A  >  body text

javascript - bind方法出错?哪里

function m(){    
    this.x=1 
}; 
m=new m;
function foo() { 
    alert(this.x + y); 
} 
foo.apply(m, [5]); //无反应??
foo.call(m, 5); //无反应??
foo1=foo.bind(m, 5); 
foo1(); //无反应??
PHP中文网PHP中文网2823 days ago240

reply all(3)I'll reply

  • 怪我咯

    怪我咯2017-04-10 17:11:44

    function m(){    
        this.x=1 
    }; 
    m=new m;
    function foo() { 
        console.log(this.x + y); 
    } 
    foo.apply(m, [5]); //
    foo.call(m, 5); //无反应??
    foo1=foo.bind(m, 5); 
    foo1(); //无反应??

    以上代码会执行错误,y变量没有定义
    m=new m;是的m不再是一个函数对象,为一个普通的对象,通过原来的m构造函数创建的

    我们修改一下

    function m(){    
        this.x=1 
    }; 
    m=new m;
    function foo() { 
        console.log(this.x + 2); 
    } 
    foo.apply(m, [5]); //输出 3
    foo.call(m, 5); //输出 3
    foo1=foo.bind(m, 5); 
    foo1(); //输出3

    再修改一下

    function m(){    
        this.x=1 
    }; 
    m=new m;
    function foo() { 
        var argumentsValue=0;
        for(var i=0;i< arguments.length;i++){
           argumentsValue = argumentsValue +arguments[i];
        }
        console.log(this.x + argumentsValue); 
    } 
    foo.apply(m, [5]); //输出 6
    foo.call(m, 5); //输出 6
    foo1=foo.bind(m, 5);
    foo1(5); //输出10

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 17:11:44

    看代码,你 foo 函数写错了。没有y变量

    
    function m(){    
        this.x=1 
    }; 
    m=new m;
    function foo() { 
        alert(this.x + arguments[0]); 
    } 
    foo.apply(m, [5]); //无反应??
    foo.call(m, 5); //无反应??
    foo1=foo.bind(m, 5); 
    foo1();

    reply
    0
  • 阿神

    阿神2017-04-10 17:11:44

    写成这个:
    function m(){

    this.x=1 

    };
    m=new m;
    function foo() {
    if(arguments[0] instanceof Array){
    console.log((this.x + arguments0)); //arguments【0】【0】不是arguments0,segment抽了?
    }else{
    console.log((this.x + arguments[0]));
    }

    }
    foo.apply(m, [[5]]); //6
    foo.call(m, 5); //6
    foo.bind(m, 5)(); //6

    reply
    0
  • Cancelreply