1、【定义一个变量_this存放this,在setTimeout里面使用这个变量_this】
function Person(name, age) { this.name = name; this.age = age; this.say = function () { var _this = this; setTimeout(function () { console.log(_this.name); //linlin }, 1000); } } let per = new Person("linlin", 18); per.say();2、使用箭头函数,箭头函数没有自己的作用域,会指向外层作用域。
function Person(name, age) { this.name = name; this.age = age; this.say = function () { //这里使用箭头函数,this指向了外层作用域,也就是指向了Person构造出来的实例对象。 setTimeout(() => { console.log(this.name); //linlin }, 1000); } } let per = new Person("linlin", 19); per.say();字面量写法的对象中不建议用箭头函数。因为箭头函数的this指向外层作用域,而obj是一个对象,没有作用域。
//(1)字面量对象中的普通函数 let obj = { name: "zs", age: 18, say: function () { console.log(this.name); //zs } } //obj对象调用了say方法,this指向了obj,所以this指向obj obj.say(); //(2)字面量对象中使用了箭头函数,this指向外层作用域,但是obj无法产生作用域,也就是this实际指向了window。 var name= 'ls; var obj = { name: ‘zs’, age: 18, say: ()={ console.log(this.name); //ls } } obj.say();