这几天一直学习JavaScript的面向对象,了解了JS的原型链,继承,Call的作用,以及this的指向.
Call()和this的指向
this总是指向调用某个方法的对象,使用call()和apply()方法时,就会改变this的指向
参考MDN,Call()的作用有这几种
使用Call()调用父构造函数,来实现继承

function a(name, age) {
    this.n = name
    this.age = age
}
function b(name, age) {
    a.call(this, name, age)
}
var obj = new b('张三', 18)
console.log(obj)

使用 call 方法调用函数并且指定上下文的 'this'

function fn(x, y) {
    this.x = x
    this.y = y
    console.log(this); //{name: "andy", x: 1, y: 2}
}
var o = {
    name: 'andy'
};
// fn();
// 1. call() 可以调用函数
// fn.call();
// 2. call() 可以改变这个函数的this指向 此时这个函数的this 就指向了o这个对象
fn.call(o, 1, 2);

this作为实参的指向

window.addEventListener('load', function() {
function a() {
    // this.name = 1;
    this.meth = function(obj) {
        console.log(obj)
    }
}
var o = new a();
console.log(o)
o.meth(this)//Window

严格模式等的this指向问题

  1. 以前在全局作用域函数中的this指向windows对象
  2. 严格模式下全局作用域中函数的this是undefined
  3. 以前构造函数时不加new也可以调用,当普通函数,this指向全局对象
  4. 严格模式下,如果构造函数不加new调用,this会报错
  5. new实例化的构造函数指向创建的对象实例
  6. 定时器的this还是指向windows
  7. 事件、对象还是指向调用者
  8. 箭头函数this始终指向window
Last modification:June 11th, 2020 at 12:06 pm
如果觉得我的文章对你有用,请随意赞赏