javascript - bind方法出错?哪里
PHP中文网
PHP中文网 2017-04-10 17:09:44
[JavaScript讨论组]
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中文网

认证高级PHP讲师

全部回复(3)
怪我咯
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
PHP中文网

看代码,你 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();
阿神

写成这个:
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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号