this,call,apply

除去不常用的 with 和 eval 的情况,具体到实际应用中, this 的指向大致可以分为以下 4种。
 作为对象的方法调用。
 作为普通函数调用。
 构造器调用。
 Function.prototype.call 或 Function.prototype.apply 调用

this的坑

window.name = 'globalName';
var myObject = {
    name: 'sven',
    getName: function(){
        return this.name;
    }
};
var getName = myObject.getName;
console.log( getName() ); // globalName

有时候我们会遇到一些困扰,比如在 div 节点的事件函数内部,有一个局部的 callback 方法,
callback 被作为普通函数调用时, callback 内部的 this 指向了 window ,但我们往往是想让它指向
该 div 节点

<html>
<body>
    <div id="div1">我是一个 div</div>
</body>
<script>
    window.id = 'window';
    document.getElementById( 'div1' ).onclick = function(){
        alert ( this.id ); // 输出:'div1'
        var callback = function(){
            alert ( this.id ); // 输出:'window'
        }
        callback();
    };
</script>
</html>

可以定义 var that = this; 用于保存 div 节点的引用

原文地址:https://www.cnblogs.com/luguiqing/p/7198382.html