本文主假如自身进修时纪录的,仅供参考,若有毛病可帮助提出,感谢。
对象要领的挪用:(当一个函数作为一个对象的属性时,我们称它为要领)
var name = 'window';
var obj = {
name: 'obj',
//箭头函数
sayName: () => {
console.log(this); // window对象
console.log(this.name); // 'window'
},
// 一般函数
getName: function(){
console.log(this); // obj对象
console.log(this.name); // 'obj'
}
}
obj.sayName();
obj.getName();
var obj_1 = {name: 'obj_1'}
obj.sayName.apply(obj_1) // window对象,'window'
一般的函数挪用:
// 当函数被当作函数挪用时,this是绑定在window对象上面的,这是javaScript言语上设想的毛病
// 在ES6的箭头函数,改正的以上的毛病,然则并没有完整改正毛病,
//【箭头函数中的this的绑定在实行上下文的全部关闭函数的this,假如没有关闭的函数将绑定到window上面】
//罕见的挪用
function m(){
console.log(this); // window对象
}
m();
var n = () => {
console.log(this); // window对象
}
n();
//对象要领中函数的this
var name = 'window';
var obj = {
name: 'obj',
sayName: function(){
console.log(this); // 温习一下,此处为obj对象
f();
function f(){
console.log(this); // window对象
console.log(this.name); // 'window'
}
return function(){
console.log(this); // window对象
console.log(this.name); // 'window'
}
}
}
obj.sayName()();
// 用箭头函数看看this
var name = 'window';
var obj = {
name: 'obj',
sayName: function(){
var f = () => {
console.log(this); // obj对象
console.log(this.name); // 'obj'
}
f();
return () => {
console.log(this); // obj对象
console.log(this.name); // 'obj'
}
}
}
obj.sayName()();
var obj_1 = {name: 'kangkang'};
obj.sayName().apply(obj_1); //和上面输出雷同
组织函数中的this:(组织函数不能运用箭头函数,所以不斟酌箭头函数)
// 组织函数中的this指向新创建的对象自身
var Person = function(name){
this.name = name;
}
Person.prototype.getName = fucntion() {
return this.name;
}
var obj = new Person('kangkang');
obj.getName(); // kangkang
bind/call/apply 转变this的指向这里不想细致引见
// 因为箭头函数没有自身的this,所以bind、call、apply要领对箭头函数失效
待后续完美......