代码输出之this问题

653 阅读1分钟

this相关

1. 代码输出结果

function foo() {
  console.log( this.a );
}

function doFoo() {
  foo();
}

var obj = {
  a: 1,
  doFoo: doFoo
};

var a = 2; 
obj.doFoo()

2. 代码输出结果

var a = 10
var obj = {
  a: 20,
  say: () => {
    console.log(this.a)
  }
}
obj.say() 

var anotherObj = { a: 30 } 
obj.say.apply(anotherObj) 

3. 代码输出结果

function a() {
  console.log(this);
}
a.call(null);

4. 代码输出结果

var obj = { 
  name: 'cuggz', 
  fun: function(){ 
     console.log(this.name); 
  } 
} 
obj.fun()     // 
new obj.fun() // 

5. 代码输出结果

var obj = {
  say: function() {
    var f1 = () =>  {
      console.log("1111", this);
    }
    f1();
  },
  pro: {
    getPro:() =>  {
       console.log(this);
    }
  }
}
var o = obj.say;
o();
obj.say();
obj.pro.getPro();

6. 代码输出结果

var myObject = {
  foo: "bar",
  func: function() {
      var self = this;
      console.log(this.foo);  
      console.log(self.foo);  
      (function() {
          console.log(this.foo);  
          console.log(self.foo);  
      }());
  }
};
myObject.func();

7. 代码输出结果

window.number = 2;
var obj = {
 number: 3,
 db1: (function(){
   console.log(this);
   this.number *= 4;
   return function(){
     console.log(this);
     this.number *= 5;
   }
 })()
}
var db1 = obj.db1;
db1();
obj.db1();
console.log(obj.number);     // 
console.log(window.number);  // 

8. 代码输出结果

var length = 10;
function fn() {
    console.log(this.length);
}
 
var obj = {
  length: 5,
  method: function(fn) {
    fn();
    arguments[0]();
  }
};
 
obj.method(fn, 1);

9. 代码输出结果

var a = 1;
function printA(){
  console.log(this.a);
}
var obj={
  a:2,
  foo:printA,
  bar:function(){
    printA();
  }
}

obj.foo(); // 
obj.bar(); // 
var foo = obj.foo;
foo(); // 

10. 代码输出结果

var x = 3;
var y = 4;
var obj = {
    x: 1,
    y: 6,
    getX: function() {
        var x = 5;
        return function() {
            return this.x;
        }();
    },
    getY: function() {
        var y = 7;
        return this.y;
    }
}
console.log(obj.getX()) // 
console.log(obj.getY()) // 

11. 代码输出结果

var a = 10; 
var obt = { 
  a: 20, 
  fn: function(){ 
    var a = 30; 
    console.log(this.a)
  } 
}
obt.fn();  // 
obt.fn.call(); // 
(obt.fn)(); // 

12. 代码输出结果

function a(xx){
  this.x = xx;
  return this
};
var x = a(5);
var y = a(6);

console.log(x.x)  // 
console.log(y.x)  // 

13. 代码输出结果

function foo(something){
  this.a = something
}

var obj1 = {
  foo: foo
}

var obj2 = {}

obj1.foo(2); 
console.log(obj1.a); // 

obj1.foo.call(obj2, 3);
console.log(obj2.a); // 

var bar = new obj1.foo(4)
console.log(obj1.a); // 
console.log(bar.a); //

14. 代码输出结果

function foo(something){
  this.a = something
}

var obj1 = {}

var bar = foo.bind(obj1);
bar(2);
console.log(obj1.a); 

var baz = new bar(3);
console.log(obj1.a); 
console.log(baz.a);