箭头函数与普通函数不同
1:箭头函数不能使用new
2:箭头函数不能使用arguments,使用 rest参数 …
var a = (...A)=>{
console.log(A)
}
3:箭头函数指向
先看一个栗子
var obj = {
a:10,
b()=>{
console.log(this.a); //underfined
console.log(this); //widow
},
c:function(){
console.log(this.a); //10
console.log(this);//obj
}
}
在我的理解里面 箭头函数指向为同级,普通方式的上一级
实际上:箭头函数不定义this
4:没有原型属性
5:不能使用generator 和 yield
ps:终于理解 this在箭头函数中指向上下文,而在普通函数中谁调用指向谁。
1.箭头函数的this绑定看的是this所在的函数定义在哪个对象下,绑定到哪个对象则this就指向哪个对象
2.如果有对象嵌套的情况,则this绑定到最近的一层对象上
题外:
如何想获得传入的参数
var a = function(1,…,50){};
可以通过arguments获得
构造函数:
函数创建有两种方式:
var a = function(){};
function A (){};
var as = new A();
第二种可以通过new 创见一个新的函数;
使用内部的字符串函数创建一个字符串对象
下面几个例题吧[:https://blog.csdn.net/u013344815/article/details/73184928/]
var obj = {
fn:function(){
console.log(this); //指向obj,这个函数本身
}
}
var obj = {
fn:function(){
setTimeout(function(){
console.log(this); //window
})
}
}
this指向最外层window,this出现在setTimeout()中没有被调用
如果这里使用箭头函数又指向了obj本身。
var obj1 = {
num:3,
fn:function(){
setTimeout(function(){
console.log(this.num); //undefined
})
}
}
var obj1 = {
num:4,
fn:function(){
setTimeout(()=>{
console.log(this.num); //4;
})
}
}
在没有箭头函数的情况下,this指向window,在使用箭头函数的情况下,this指向obj
var obj1={
num:4,
fn:function(){
var f=() => { //object,也就是指obj1
console.log(this);
setTimeout(() => {
console.log(this);// //object,也就是指obj1
});
}
f();
}
}
var obj1={
num:4,
fn:function(){
var f=function(){
console.log(this); //window,因为函数f定义后并没有对象调用,this直接绑定到最外层的window对象
setTimeout(() => {
console.log(this);//window,外层this绑定到了window,内层也相当于定义在window层(全局环境)
});
}
f();
}
}
改变f箭头函数之后this指向window,因为没有定义
var obj1={
num:4,
fn:function(){
var f=() => {
console.log(this); //object,f()定义在obj1对象中,this就指向obj1,这就是箭头函数this指向的关键
setTimeout(function() {
console.log(this);//window,非箭头函数的情况下还是要看宿主对象是谁,如果没有被对象调用,函数体中的this就绑定的window上
});
}
f();
}
}