全局对象中的this,指的是 window 对象
创建一个对象 ling
ling.getAge 和 ling.getAge( ):
var ling = { age: 26, getAge: function() { return this.age; } }
console.log(ling.getAge); //不加括号 //返回 function () { return this.age; } //说明 getAge 是 ling对象的一个方法(函数) console.log(ling.getAge()); //加括号,就是调用函数。这里调用了ling对象的方法 //返回 26。
不加括号:ling.getAge 是一个方法(函数)。
因为 getAge 是ling 对象的一个方法。结果返回:ling.getAge 是一个function
加括号:ling.getAge( ) 调用了这个方法(调用函数)。
结果返回:26,函数执行后的结果。此时函数中的this 作用域为 ling 这个对象。
创建新对象 tongGetAge,并把 ling.getAge 这个方法赋值给他。所以 tongGetAge 获得的是一个方法(函数)
但是, tongGetAge( ) 调用函数时,返回undefined。
原因: tongGetAge 被赋值了一个函数 function () { return this.age; },调用该函数时,this 指向了全局作用域。此时全局作用域中没有参数 age,所以返回undefined
var tongGetAge = ling.getAge; //新建tongGetAge对象,把ling.getAge 这个方法(函数)赋值给他 console.log(tongGetAge); //返回 function () { return this.age; } console.log(tongGetAge()); //调用函数。 //返回undefined, //因为该函数内的this此时指向全局作用域,所以this.age 为未定义值
全局 this 指的是什么?
var tongGetAge = ling.getAge; //新建tongGetAge对象,把ling.getAge 这个方法(函数)赋值给他 console.log(this.age); console.log(this);
此时的 this.age 为undefined.(在全局中找不到 age 参数)
this 指向了 window 对象(全局作用域)
全局作用域 window==this
console.log(this==window);
返回结果 true
声明全局变量 age
调用 tongGetAge( ) 函数运行成功。
var age=20; console.log(tongGetAge()); //全局声明age值后,函数可正常调用,返回值20
返回结果:20
![]()
全局声明 var age == this.age == window.age
console.log(age==this.age); console.log(age==window.age); //检测 var 全局声明的age 全等于 this.age 和 window.age 对象
总结:新建对象从一个已有对象赋值一个方法时,新对象作用域与已有对象作用域不同时,结果也不一样;
全局作用域中,全局对象为window. 此时的this指向的也是window. 因此用var全局声明的参数,也是 window 的参数