1.apply、call 有什么作用,什么区别
- 两者都属于Function.prototype的一个方法,以另一个对象替换当前对象。
- 区别:
方法传递的参数不同:apply接收参数列表,call接收参数数组。
apply语法:fun.apply(thisObj,[argArray])--argArray表示一个数值或者类数组对象
call语法:fun.call(thisObj,Object)
2.以下代码输出什么?
var john = {
firstName: "John"
}
function func() {
alert(this.firstName + ": hi!")
}
john.sayHi = func
john.sayHi() //弹窗弹出的是John: hi!
3.下面代码输出什么,为什么
func()
function func() {
alert(this)//弹窗弹出的是window,因为是在window下调用函数,所以this指的是window
}
4.以下代码输出什么?
function fn0(){
function fn(){
console.log(this); //输出的是window,因为this是在window下调用的
}
fn();
}
fn0();
document.addEventListener('click', function(e){
console.log(this);//输出的是document,因为这个是事件绑定,所以this指的是事件源DOM对象
setTimeout(function(){
console.log(this); //输出的是window
}, 200);
}, false);
5.下面代码输出什么
var john = {
firstName: "John"
}
function func() {
alert( this.firstName )
}
func.call(john)
//弹出的是John,因为使用call(john)就是把函数执行的上下文及参数Jojn传递给func函数,所以这时的this指的就是John
6.下面代码输出什么
var john = {
firstName: "John",
surname: "Smith"
}
function func(a, b) {
alert( this[a] + ' ' + this[b] )
}
func.call(john, 'firstName', 'surname')
//弹出的是John Smith
7.以下代码有什么问题,如何修改
var module= {
bind: function(){
$btn.on('click', function(){
console.log(this) //this指的是$btn
this.showMsg(); //这里应该改为module.showMsg(),如果不修改的话this指的还是$btn,然而会在$btn源DOM对象找showMsg(),这样就会报错
})
},
showMsg: function(){
console.log('饥人谷');
}
}