this代表的是 执行这个this代码的环境对象
也可以说是this指的是 这个代码块的调用者是
var obj={
name:"karen",
sayname:function(){
console.log(this)
}
}
obj.sayname()
这个例子在控制台打印的就是obj 因为是obj去调用这个sayname函数
如果直接在全局作用下打印时this 的话 他指向的是window全局对象
console.log(this)
function fn6666(){
console.log(this,1111111111)
}
fn6666()
像这样直接在全局作用域下去调用的写法
其实就是window.fn6666()
所以this也指向了window
全局变量会在脚本执行时 把变量名设置为全局对象window的属性
也就是说
var a=20
本来window对象是固定的 他是由系统本身定义的
现在这window这个全局对象中添加了一个名为a的属性
现在我们来说一下对象调用方法
刚刚我们的函数都是直接写在全局对象中的
现在有一个函数他是写在一个我们自定义的对象中的
var obj={
name:"karen",
fn:function(){
console.log(this)
}
}
obj.fn()
这个this指向的就是对象obj 因为obj去调的这个fn函数
可以理解为.语法前面的就是调用者
var obj2={fn:function(){console.log(this,1111)}}
var arr=[]
arr[0]=100
arr[1]=obj2.fn
console.log(arr[1])
arr[1]()
我们创建了一个新的数组
添加的一个数据是100 添加的第二数据是对象obj2中的fn函数
然后我们通过下标在数组中找到这个fn函数然后调用 现在这个调用者就变成了arr这个数组
var obj={
name:"芭比",
son:{
name:"儿子",
say:function(){
console.log(this)
}
}
}
obj.son.say()
像是这个嵌套了多级的对象调函数 this指向的还是.语法函数前面一级的调用者
函数可以不写函数名
var a=function(){}
a()
可以创建一个函数把他保存在一个变量中
function fn(){
return function fm(){
console.log(this)
}
}
fn()()
连着的两个小括号说明fn函数调用后返回值又是一个函数然后接着调用
this还是指向window
this有什么用呢
为了方便去操作对象的成员
this.xx=xx
var obj={
name:"karen",
say:function(){
console.log(this)//obj
function fn(a){
console.log(a,this)//obj winodw
}
// var a=this
// fn(a)
fn(this)//fn(obj)
}
}
obj.say()//obj
这个题的难点就在于 console.log(a,this)//obj winodw
this为什么指向的是window 首先我们要去看看fn函数的调用者是谁
fn(this)//fn(obj)是这一句所以是window
(function(){})()这种方法又称为函数的自调用
var name = 'lili';
var obj = {
name: 'liming',
prop: {
name: 'ivan',
getname: function() {
return this.name;
}
}
};
console.log(obj.prop.getname());//ivan
var test = obj.prop.getname;
console.log(test());//lili
这个题就考验了前面的知识
function Foo() {
getName = function () {console.log (1)};
console.log(this)
return this;
}
var getName = function () {console.log (4);};
Foo().getName ();
//1
为什么是1?
函数本身是不运行的
后面var getname定义了这个变量 当foo函数运行时候 因为在函数体内找不到getname这个变量就会在上一个作用域中找也就是全局作用域中找也就找到了全局变量getname把getname这个函数修改了 所以是1