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 节点的引用

浙公网安备 33010602011771号