全局作用域的this
this == window //true this.a = 8 window.a //8
一般函数的this
function thisTest(){ return this; } thisTest() === window //true function thisTest(){ ‘use strict‘ return this; } thisTest() === undefined //true
作为对象方法的函数中的this
var o = { x:1, y:2, f:function(){ return this.x } } o.f() //x 做为对象方法函数中this,指向的是这个对象
对象原型链的上this
var o = {f:function(){retrn this.a+this.b}} var obj = Object.create(o) obj.a = 90; obj.b = 10; obj.f() //100 原型链上的this,指向obj
构造器中的this
function fuc(){ this.a = 37; } var f = new fuc(); f.a //37
function func(){ this.a = 65; return 1; } var func = new func(); func.a //65
function funct(){ this.a = 65; return {x:1}; } var funct = new funct(); funct.x //1
// 通过new构造器创建对象时// 1 没有return 或者 return时基本类型的时候。返回this. (this的原型指向this所在的函数)// 2 返回的是对象类型,会将return的对象作为返回值
call/apply方法与this
function add(c){ return this.a+this.b+c } var o = {a:2,b:4} add.call(o,4) //10 call第一个参数传入要作为this的对象,后面参数传入函数参数列表中的参数,并以逗号隔开
function add1(c){ return this.a+this.b+c } var o1 = {a:2,b:4} add1.apply(o,[4]) //10 apply第一个参数传入要作为this的对象,后面参数传入函数参数列表中的参数,作为数组传入
function fuc(x,y){
console.info(x,y,this)
}
fuc.call(1,7,6); //7 6 Number
fuc.call(null); //undefined undefined Window
fuc.apply(null); //undefined undefined Window
fuc.call(undefined); //undefined undefined Window
fuc.apply(undefined); //undefined undefined Window 在一般模式下,call,apply传入null,undefined指向的window
bind方法与this
function z (){ return this.a }; var g = z.bind({a:"89"}); g() //"89" var o = {a:4,f:z,g:g}; o.f() //4 函数作为对象方法,this指向o对象,所有 o.f()为4 o.g() // "89" bind方法绑定了z()中this的指向为{a:"89"}
时间: 2024-11-09 09:36:37