this的指向问题
程序员文章站
2022-03-17 13:03:33
...
一、函数调用模式 :函数名()
this指向window
var num = 11
function fn() {
console.log(this.num)
}
fn();// 11 this指向window
二、方法调用模式:对象名.方法名()
this永远指向 当前对象
var age = 20
var obj = {
name: 'zs',
age: 18,
sayHi: function() {
console.log(this.age)
}
}
obj.sayHi();// 18 this指向obj
三、构造函数调用模式:new 函数名()
this指向新创建的对象
function Person(name, age){
this.name = name;
this.age = age;
}
var p = new Person('zs', 18);
console.log(p.name);// zs this指向p
四、上下文调用模式
call()与apply(): 都可以让函数执行, 第一个参数都是 this的指向
区别: call(this, 参数1, 参数2, 参数3)
apply(this, [参数1, 参数2, 参数3])
apply方法要求所有的参数都包含一个数组中
var obj = {
0: 'zs',
1: 'ls',
length: 2
}
//;[].push.call(obj, '王五', '赵六')
;[].push.apply(obj, ['王五', '赵六'])
console.log(obj)
// 求数组的最大值
var arr = [100, 300, 200, 10]
var result = Math.max.apply(null, arr)
console.log(result);// 300
// 需求:无论传递多少个参数, 需要把所有的参数用-拼接起来并且打印
function log() {
// console.log(arguments)
console.log([].join.call(arguments, '-'));// join中的this指向arguments
}
log('张三', '李四', '王五');// 张三-李四-王五
log(1, 2, 3);// 1-2-3