SOURCE

var Foo = {
    name: "Foo"
};
Foo.method = function () {
    function test() {
        //直接调用函数时,this 指向全局对象。不管函数定义在什么地方,在什么地方调用。
        //被认为是JavaScript语言另一个错误设计的地方,因为它从来就没有实际的用途。
        //这里不能和var对比理解,var也不是给当前对象添加属性,而是给函数作用域。
        console.log(this.toString());
    }
    test();
}
Foo.method();

Foo.method2 = function () {
    var that = this;
    function test() {
        console.log(that);
        // 使用 that 来指向 Foo 对象
    }
    test();
}
Foo.method2();



function Foo1111() { 
    name: "Foo1111"
}
Foo1111.prototype.method = function () { 
    console.log("this name in : "+ this.name);
};

function Bar() {
    this.name ="Bar"
 }
 console.log("Bar.prototype.constructor is :" + Bar.prototype.constructor);
Bar.prototype = Foo1111.prototype;
console.log("Bar.prototype = Foo1111.prototype 以后,Bar.prototype.constructor is :" + Bar.prototype.constructor);

new Bar().method();
//new Bar()可以直接调用生成的对象。
(new Bar()).method();


    Function.prototype.add=function(name,fn){
      this.prototype[name]=fn;
      return this;
    }
    var Methods=function(){
      this.addObj = function () { console.log("my is add to obj") }
    };
    Methods.add('a', function () { console.log("a") }).add('b', function () { console.log("b")})
    console.log(Methods)
    console.log(Methods.prototype)
    var che=new Methods();
    che.addObj()//"my is add to obj"
    che.a()//b

    console.log(che.constructor)
    console.log(che.constructor == Methods)//true


  var a = 2
  function foo(){
  console.log(this.a)
  }
  var obj = {
    a:1,
    f:foo,
  }
  obj.f()// 1, this指向obj
  foo()//2,this指向全局window

//箭头函数,this在声明时指向window,在调用时指向声明时所在的上下文this
  var a = 2
  var obj = {
    a:1,
    f: ()=>{console.log(this.a) },
    f1: function(){
      (()=>{console.log(this.a)})() }
    
  }
  obj.f()// 2, this指向window
  obj.f1()// 1, this指向外层的上下文


  var obj2 = {
      a:1,
      f: function foo(){
         console.log(this.a)
      },
 }
 
var newObj2={
         a:2
} 
//取决于函数的调用方;而非定义区域
 newObj2.f = obj2.f
 obj2.f()  // 1 
 newObj2.f() //2
console 命令行工具 X clear

                    
>
console