- apply、call 有什么作用,什么区别
- apply()方法可以在设置指定的this值和参数的情况下调用某个函数,参数以数组或类数组对象的形式存在
- call()方法可以在设置指定的this值和一个或若干指定的参数即参数列表的前提下调用某个函数
- call和apply的作用一样,不同之处是参数的形式不同,call接收参数列表,apply则接收参数数组
代码
1.以下代码输出什么
var john = {
firstName: "John"
}
function func() {
alert(this.firstName + ": hi!")
}
john.sayHi = func
john.sayHi()
输出:John:hi!
2.下面代码输出什么,为什么
func()
function func() {
alert(this)
}
输出:window 因为该函数的执行环境是全局环境window
3.下面代码输出什么
function fn0(){
function fn(){
console.log(this);
}
fn();
}
fn0();
document.addEventListener('click', function(e){
console.log(this);
setTimeout(function(){
console.log(this);
}, 200);
}, false);
输出:window document window
4.下面代码输出什么,why
var john = {
firstName: "John"
}
function func() {
alert( this.firstName )
}
func.call(john)
输出:John 因为函数实例func调用call方法,指定函数func内部的this指向john对象。
5.代码输出?
var john = {
firstName: "John",
surname: "Smith"
}
function func(a, b) {
alert( this[a] + ' ' + this[b] )
}
func.call(john, 'firstName', 'surname')
输出:John Smith
6.以下代码有什么问题,如何修改
var module= {
bind: function(){
//改成var that=this即可
$btn.on('click', function(){
console.log(this) //this指什么,此处this指的是$btn,$btn没有showMsg属性,会报错,不符合题意想要表示的是module
this.showMsg();
})
},
showMsg: function(){
console.log('饥人谷');
}
}
修改后:
var module= {
bind: function(){
var that=this;
$btn.on('click', function(){
console.log(this);
that.showMsg();
})
},
showMsg: function(){
console.log('饥人谷');
}
}
版权声明:本教程版权归本人与饥人谷所有,转载需说明来源
网友评论