首页 > 其他 > 详细

This is this

时间:2019-10-10 20:21:42      阅读:97      评论:0      收藏:0      [点我收藏+]

首先,我们来了解一下 this 的几种绑定方式:

  this的默认绑定:

 当一个函数没有明确的调用对象的时候,即作为独立函数调用时,this绑定到全局window对象。

 

function  func() {
    console.log(this);
}

func()  //window

 

  this的隐式绑定:

 当函数被其他对象包含再其中时,这时this被隐式绑定到了这个对象中;因此,通过this可以直接访问到该对象中的其他属性。

var foo = {name:‘Lily‘}
var obj = {
    name: ‘John‘,
    age: 20,
    sayName: function(){
        console.log(this === obj); 
        console.log(this.name);   
    }
}
obj.sayName();      //true  John
foo.sayName = obj.sayName;
foo.sayName();      //false  Lily

  this的显式绑定:

 调用call() 或 apply()方法来实现this的主动绑定

var animals = [
    {species: ‘Lion‘, name: ‘King‘},
    {species: ‘Whale‘, name: ‘Fail‘}
  ];
  
  for (var i = 0; i < animals.length; i++) {
    (function (i) { 
      this.print = function () { 
        console.log(‘#‘ + i  + ‘ ‘ + this.species + ‘: ‘ + this.name); 
      } 
      this.print();
    }).call(animals[i], i);
  }
  //#0 Lion: King
  //#1 Whale: Fail

  this的new绑定:

 函数被执行new操作后,将创建一个新的对象,并将构造函数的this指向所创建的构造函数。

function foo(name){
    this.name = name
}

var bar = new foo(‘John‘);
console.log(bar.name); //John

  this的硬绑定

 当this被强制绑定后,无论之后任何调用该this都不变

var a = 5;
function foo(){
    console.log(this.a);
}
var obj = {
    a: 2
}
var bar = function(){
    foo.call(obj);
}
bar();           //2
bar.call(window);//2

  

未完

  

This is this

原文:https://www.cnblogs.com/xuhua123/p/11649947.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!