关于JavaScript中this的题目

本文主假如自身进修时纪录的,仅供参考,若有毛病可帮助提出,感谢。

对象要领的挪用:(当一个函数作为一个对象的属性时,我们称它为要领)

var name = 'window';
var obj = {
    name: 'obj',
    //箭头函数
    sayName: () => {
        console.log(this); // window对象
        console.log(this.name);  // 'window'
    },
    // 一般函数
    getName: function(){
        console.log(this); // obj对象
        console.log(this.name); // 'obj'
    }
}
obj.sayName();
obj.getName();
var obj_1 = {name: 'obj_1'}
obj.sayName.apply(obj_1) // window对象,'window'

一般的函数挪用:

// 当函数被当作函数挪用时,this是绑定在window对象上面的,这是javaScript言语上设想的毛病
// 在ES6的箭头函数,改正的以上的毛病,然则并没有完整改正毛病,
//【箭头函数中的this的绑定在实行上下文的全部关闭函数的this,假如没有关闭的函数将绑定到window上面】
//罕见的挪用
function m(){
    console.log(this); // window对象
}
m();

var n = () => {
    console.log(this); // window对象
}
n();

//对象要领中函数的this
var name = 'window';
var obj = {
    name: 'obj',
    sayName: function(){
        console.log(this); // 温习一下,此处为obj对象
        f();
        function f(){
            console.log(this); // window对象
            console.log(this.name); // 'window'
        }
        return function(){
            console.log(this); // window对象
            console.log(this.name); // 'window'
        }
     }
}
obj.sayName()();

// 用箭头函数看看this
var name = 'window';
var obj = {
    name: 'obj',
    sayName: function(){
        var f = () => {
            console.log(this); // obj对象
            console.log(this.name); // 'obj'
        }
        f();
        return () => {
            console.log(this); // obj对象
            console.log(this.name); // 'obj'
        }
     }
}
obj.sayName()();
var obj_1 = {name: 'kangkang'};
obj.sayName().apply(obj_1); //和上面输出雷同

组织函数中的this:(组织函数不能运用箭头函数,所以不斟酌箭头函数)

// 组织函数中的this指向新创建的对象自身
var Person = function(name){
    this.name = name;
}
Person.prototype.getName = fucntion() {
    return this.name;
}
var obj = new Person('kangkang');
obj.getName(); // kangkang

bind/call/apply 转变this的指向这里不想细致引见

// 因为箭头函数没有自身的this,所以bind、call、apply要领对箭头函数失效
待后续完美......
    原文作者:viciky
    原文地址: https://segmentfault.com/a/1190000014088658
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞