JS面试题this

74 阅读1分钟

函数调用不添加括号 函数内部this指的是window

function Foo(){
    // 这里是个坑,getName前面没有this.,执行Foo()的时候相当于给全局window增加了getName方法
    //window.getName = function () {console.log(1)}
    getName = function(){
        console.log(1)
    }
    return this
}
Foo.getName = function () {
    console.log(2)
}
Foo.prototype.getName = function () {
    console.log(3)
}
var getName = function(){console.log(4)}
function getName(){
    console.log(5)
}

Foo.getName() // 2  Foo函数自身就有getName方法
getName() // 4  
Foo().getName() // 1
getName()
new Foo().getName() // 3
var o = {
    a: 10,
    b: {
        fn: function(){
            console.log(this.a)
            console.log(this)
        }
    }
}
// 最终调用fn方法的是b对象,fn方法里面的this指向的是b,所以console.log(this.a)是
o.b.fn() //  undefined