this 是一个在运行时才进行绑定的引用,在不同的情况下它可能会被绑定不同的对象。
默认绑定 (指向window的情况) (函数调用模式 fn() )
默认情况下,this 会被绑定到全局对象上,比如在浏览器环境中就为window对象,在node.js环境下为global对象。
message = "Hello"; function test () { console.log(this.message); } test() // "Hello"
隐式绑定 (谁调用, this指向谁) (方法调用模式 obj.fn() )
如果函数的调用是从对象上发起时,则该函数中的 this
会被自动隐式绑定为对象:
function test() { console.log(this.message); } let obj = { message: "hello,海海, test: test } obj.test() // "hello,海海"
显式绑定 (又叫做硬绑定) (上下文调用模式, 想让this指向谁, this就指向谁)
硬绑定 => call apply bind
可以显式的进行绑定:
function test() { console.log(this.message); } let obj1 = { message: "你好海海" } let obj2 = { message: "你好呀海海" } test.bind(obj1)() // "你好海海" test.bind(obj2)() // "你好呀海海" ———————————————— 版权声明:本文为CSDN博主「海海呐」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/m0_56344602/article/details/120555942
new 绑定 (构造函数模式)
另外,在使用 new
创建对象时也会进行 this
绑定
当使用 new
调用构造函数时,会创建一个新的对象并将该对象绑定到构造函数的 this
上:
function Greeting(message) { this.message = message; } var obj = new Greeting("hello,海海") obj.message // "hello,海海"