# 10-27

参考:

进度:🍅*3

# 原子笔记

  • function makeUser() {
      return {
        name: "John",
        ref: this
      };
    };
    
    let user = makeUser();
    
    alert( user.ref.name ); // Error: Cannot read property 'name' of undefined
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    作为函数被调用时,this 的值是对于整个函数的,代码段和对象字面量对它都没有影响。

  • 在一个函数内部,可以使用 new.target 属性来检查它是否被使用 new 进行调用了。

    对于常规调用,它为空,对于使用 new 的调用,则等于该函数:

    function User() {
      alert(new.target);
    }
    
    // 不带 "new":
    User(); // undefined
    
    // 带 "new":
    new User(); // function User { ... }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 对于构造器而言,带有对象的 return 返回该对象,在所有其他情况下返回 this

  • 可选链 ?. 不能用在赋值语句的左侧。

  • Symbol 属性不参与 for..in 循环,也会被Object.keys(obj)忽略;而Object.assign 会同时复制字符串和 symbol 属性。

  • 对象——原始值转换算法:

    1. 如果存在,调用 obj[Symbol.toPrimitive](hint)
    2. 否则
      • 如果 hint 是"string",先尝试 obj.toString() ,后尝试obj.valueOf()
      • 如果 hint 是"number"或者 "default",先尝试 obj.valueOf() ,后尝试obj.toString()
上次更新: 11/5/2020, 11:37:40 PM