var obj = {
name: '王超',
showName: function(){
var showThisName = function(){
alert(this.name);
}
showThisName();
}
}
obj.showName()
var obj = {
name: '王超',
showName: function(){
var showThisName = () => {
alert(this.name);
}
showThisName();
}
}
obj.showName()
(1)函数表达式和函数声明定义的函数内部,this指向window
var a = 20;
var obj = {
a: 10,
c: this.a + 20, ==> this: window
fn: function () {
return this.a; ==> this: obj
}
}
console.log(obj.c); ==> 40
console.log(obj.fn()); ==> 10
将函数内部 arguments 转换为数组
function exam(a,b,c,d,e){
return arg = [].slice.call(arguments);
}
exam(1,2,3,4,5);
(2) 通过call和apply显示的指定this,ES5中的bind方法也可以
(3) 构造函数与原型方法上的this
function Person(name, age){
this.name = name;
this.age = age;
}
如果通过 new Person('wang', 24)来调用,Person内部this指向 Person 对象
如果通过 普通函数Person('wang', 24)来调用,Person内部this指向window对象
通过 new 操作符调用构造函数,会经历以下4个阶段:
- 创建一个新对象
- 将构造函数的this指向这个新对象
- 将构造函数中的属性,方法指向新对象
- 返回新对象