javascript中对this的理解

//1.函数预编译过程中 this --> window

//AO  this: window

function test() {

  console.log(this)

}

test()  //window

//2.全局作用域里 this --> window

//GO  this: window

console.log(this)  //window

//3.call/apply可以改变函数运行时this指向

var obj = {}

function Person(name, age) {

  this.name = name

  this.age = age

}

Person.call(obj, 'lyj', 18)

// Person.apply(obj, ['lyj', 18])

console.log(obj)  //{name: "lyj", age: 18}

//4.obj.func(), func()里面的this指向obj

var obj = {

  a: function() {

    console.log(this.name)

  },

  name: 'abc'

}

obj.a()  //abc



var name = '222'

var a = {

  name: '111',

  say: function() {

    console.log(this.name)

  }

}

var fun = a.say

fun()    //222  没有被谁调用, this指向window

a.say()  //111  被a调用, this指向a

var b = {

  name: '333',

  say: function(fun) {

    fun()  //没有被谁调用, fun里面的this指向window

  }

}

b.say(a.say)  //222 

b.say = a.say

b.say()  //333  被b调用, this指向b



var foo = {

    baz: function() {

        console.log(this)

    }

};

foo.baz(); // foo

(foo.baz)(); // also foo

(foo.baz = bar.baz)();  // 这是一个全局对象

(foo.baz, bar.baz)();    // 也是全局对象

(foo || bar.baz)();      // 也是全局对象

//解释一下:因为 = , || 都是赋值运算,而赋值语句的返回值就是赋值的值,所以后面三个转换后变成函数对象,即(function(){ console.log(this)})(), 而前面两个还是引用类型的function

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容