Js的胖箭头函数
官方推荐用, 然而一用就报错, 主要是报在this上面.
mdn说了:
- 这个是匿名函数
- 没有自己的this,arguments,super或 new.target
mdn: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions
可以各种简写:
() => 42;
_ => 42 //这个和上面等价
var timesTwo = params => params * 2
timesTwo(4);  // 8
x =>({ y: x }) //这样就直接返回了一个对象{ y: x }, 省略了return, 等同于 return { y: x }
es6提供了更简洁的写法
var person = {
  name: "Jason",
  // ES6 "method" declaration - leave off the ":" and the "function"
  shout() {
    console.log("Hi, my name is", this.name);
  }
};
这个解释非常清晰(kamituel): https://stackoverflow.com/questions/28798330/arrow-functions-and-this
window.name = "global";
var person = {
    name: "jason",
    shout: function () {
        console.log("my name is ", this.name);
    },
    shout2: () => {
        console.log("my name is ", this.name);
    },
    // Shorter syntax
    shout3() {
        console.log("my name is ", this.name);
    }
};
person.shout();  // "jason"
person.shout2(); // "global"
person.shout3(); // "jason"
mdn有解释:
objectName.methodname = functionName;
var myObj = {
  myMethod: function(params) {
    // ...do something
  }
  // OR THIS WORKS TOO
  myOtherMethod(params) {
    // ...do something else
  }
};
js的世界函数才是第一公民, this再函数内才算被包好了. 放在对象里面this就诡异了.
get set也就好理解了.
var o = {
  a: 7,
  get b() { 
    return this.a + 1;
  },
  set c(x) {
    this.a = x / 2;
  }
};
console.log(o.a); // 7
console.log(o.b); // 8
o.c = 50;
console.log(o.a); // 25
完整的语法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions
var obj = {
  property( parameters… ) {},
  *generator( parameters… ) {},
  async property( parameters… ) {},
  async* generator( parameters… ) {},
  // with computed keys:
  [property]( parameters… ) {},
  *[generator]( parameters… ) {},
  async [property]( parameters… ) {},
  // compare getter/setter syntax:
  get property() {},
  set property(value) {}
};