JavaScript - Object prototype Function __proto__

  • 对象查找属性名是先查找对象自身的属性,然后再是原型链,就是 __proto__, 然后再 __proto____proto__,如果还没有的话,一直到 Object.prototype。(Object:所有对象的构造函数)

  • 字面量对象链接到 Object.prototype. 函数 Function(也是对象)链接到 Function.prototype, Function.prototype 链接到 Object.prototype.

  • 函数(对象)之于其他对象特殊在可以被调用。每个函数有两个额外的隐藏属性:函数的上下文和代码。每个函数有两个额外的参数:this 和 arguments(类数组,有length,但是没有其他方法)。this 被函数的调用方式决定。
    4 种函数调用方式:

    1. 方法。this 在方法种,绑定到所在对象
    2. 普通函数。this 在函数中绑定到调用这个函数的上下文
    3. 构造函数。this 为 new 创建的对象。必须用 new,不然 this 是调用作用域,例如 global。不能直接使用构造函数
    4. apply。this 被绑定到别的对象   
    
  • hasOwnProperty 不检查原型链上的属性

  • 对象的 for in 会列举所有属性,包括在原型链上的

  • JavaScript 里只有(构造)函数才有 prototype,用来构建对象的蓝图;对象是 __proto__

  • delete 只能 delete 掉对象的属性,不能 delete 函数的属性

  • 所有函数都有 return。如果没有 return 语句,就会 return undefined。new 会 return this (新对象),如果构造函数没有 return 一个对象的话。
    每个函数最好 return this,这样可以使用 cascade 串联函数。