1、函数可以在不同的环境执行,函数内部获取当前执行环境,所以出现了this,不同的调用方式this指向不同
<!-- 浏览器环境 --> <script> var name = "jack"; var age = 18; var lily = { name:'lily', age:20, info: this.name + ": " + this.age, // this指向window getName: function(){ return this.name; // 调用方式不同,this指向不同 } }; console.log(lily.info); // jack: 18 console.log(lily.getName()); // lily var fn = lily.getName; console.log(fn()); // jack </script>
原因:
属性描述对象的value值是一个function时,value里存的是一个指向function的指针
2、node下的全局this(global)和浏览器下的全局this(指向window)不同
// node 运行 var name = "jack"; // 模块下的局部变量 var age = 18; global.name = "global_jack"; // 全局变量 global.age = 16 var lily = { name:'lily', age:20, info: name + ": " + age, globalInfo: this.name + ": " + this.age, // this是一个{},也不是global(this == global 为false),为什么??? getName: function(){ return this.name;) } }; console.log(lily.info); // jack: 18 console.log(lily.globalInfo); // undefined: undefined console.log(lily.getName()); // lily var fn = lily.getName; // fn为一个指针 console.log(fn()); // global_jack
疑问:对象声明的过程及其this的指向