美文网首页
JavaScript 中的this

JavaScript 中的this

作者: shadow123 | 来源:发表于2017-07-26 17:34 被阅读0次

全局上下文

在全局运行上下文中,this指全局对象。

console.log(this.document === document); // true
console.log(this === window); //true

函数上下文

DOM事件处理函数中的 this

通常来说,this 的值是触发事件的元素的引用。

button.addEventListener('click',function(e){
    console.log(this === e.currentTarget); // true
})

jQuery 中的 this

当jQuery的调用处理程序时,this关键字指向的是当前正在执行事件的元素。对于直接事件而言,this 代表绑定事件的元素。对于代理事件而言,this 则代表了与 selector 相匹配的元素。

// HTML
<div class="div">
  <button>click me</button>
</div>
// CSS
.div{
    width:200px;
    height:200px;
    background:#3CA0D0;
    display:flex;
    justify-content:center;
    align-items:center;
}
// JS
$('div').on('click',function(e){
    console.log(this === e.currentTarget);
    console.log(this === e.target);
})

当点击button时,前一个是true ,后一个是false。当点击div时,都为true。
可以看出this就是 e.currentTarget。

call和apply

当一个函数的函数体中使用了this关键字时,通过所有函数都从Function对象的原型中继承的call()方法和apply()方法调用时,它的值可以绑定到一个指定的对象上。

简单说,this就是call和apply的第一个参数。

function add(c, d){
  return this.a + this.b + c + d;
}
var o = {a:1, b:3};
add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34

如何确定this

1.console.log(this)
2.看源代码
3.看API文档

看个例子

var name = 'jack';
var object = {
    name:'lucy',
    sayHi:function(){
        console.log('hi,' + this.name)
    }
}
var fn = object.sayHi;
fn(); // fn.call() //hi,jack
object.sayHi(); // obeject.sayHi.call(object)//hi,lucy
// HTML
<button name=btn>click me</button>
// JS
var button =document.querySelector('button');
var name = 'jack';
var object = {
    name:'lucy',
    sayHi:function(){
        button.onclick = this.onClick
    },
    onClick:function(){
        console.log(this.name)
    }
}
object.sayHi();

当button 点击时,this的指向是button,打印出来就是btn。

var button = document.querySelector('button');
var name = 'jack';
var object = {
    name: 'lucy',
    sayHi: function() {
        var that = this;
        button.onclick = function() {
            console.log(that.name);
        }
    },

}
object.sayHi();

此时,点击button,打印出来的就是lucy。

相关文章

  • 1body中添加js

    1 中的 JavaScript JavaScript 函数和事件上面例子中的 JavaScript 语句,会...

  • JS中的类型转换

    JavaScript 中的类型转换 JavaScript 基本数据类型 JavaScript 中的一共有 8 中内...

  • js中的this

    javascript中的this javascript中的this与java中的this有点不同。ECMAScri...

  • JavaScript中的字符串

    @(javascript)[js字符串][toc] JavaScript中的字符串 字符串是JavaScript中...

  • 06-JavaScript数组和函数

    JavaScript数组 JavaScript中的数组可以存储不同类型的数据 JavaScript中的数组是引用类...

  • Client's JavaScript

    什么是JavaScript? JavaScript的运行环境? 浏览器中JavaScript可以做什么? 浏览器中...

  • javascript中的this

    一般说到JS的this,都会想起在函数中变来变去的this。但是事情的发生都是有规则的约束,JS中的this也不例...

  • JavaScript中的this

    什么是this? 首先对this的下个定义:this是在执行上下文创建时确定的一个在执行过程中不可更改的变量。th...

  • JavaScript中的this

    JavaScript中的this很容易让人迷惑,但弄清楚后其实还是很好区分的。JavaScript中的this总是...

  • javascript中的this

    在javascript中的this大致可以理解成谁调用的this就指向谁 全局环境中的this 函数中的this ...

网友评论

      本文标题:JavaScript 中的this

      本文链接:https://www.haomeiwen.com/subject/qveokxtx.html