关于javascript:JS的总结

37次阅读

共计 1905 个字符,预计需要花费 5 分钟才能阅读完成。

JS 的知识点

基本概念

  • 内存
  • 变量
  • 数据类型
  • 对象

管制语句

  • if…else…
  • for…

对象

  • 原型、原型链
  • 对象分类
  • new 一个新对象
  • 构造函数
  • this 的隐士传递和显示传递

三个最重要常识:

  1. JS 公式:
    对象.__proto__ === 其构造函数.prototype
  2. 根公理:
    Object.prototype 是所有对象的 (间接或间接) 原型
  3. 函数公理:

    • 所有函数都是由 Function 结构的
    • 任何函数.__proto__ === Function.prototype
    • 任意函数都有 Object/Array/Function

容易犯错观点

  • {name:‘frank’}.__proto__ 的原型 === Object.prototype
  • [1,2,3].__proto__ 的原型 === Array.prototype
  • Object.__proto__ 的原型 === Function.prototype

问题:
Object 的原型是 Object.__proto__?
解读:
对的. [的原型]等价于 [.__proto__];中文的[原型] 无奈辨别.__proto__与 prototype。所以默认约定了原型用.__proto__。
然而并不象征这两个是齐全相等的意思

观点矛盾:

  • [1,2,3]的原型是 Array.prototype
  • Object.prototype 是所有对象的原型
  • 为什么 Object.prototype 不是 [1,2,3] 的原型呢?

解读:

  • 原型分 2 种状况,间接原型和间接原型
  • 对于一般对象来说,Object.prototype 是间接原型
  • 对于数组,函数来说,Object.prototype 是间接原型



错误观点:
Object.prototype 不是根对象(X)
理由:

  • Object.prototype 是所有对象的原型
  • Object.prototype 是 Function 结构进去的
  • 所以,Function 结构了 Object.prototype
  • 推论,Function 才是万物之源

解答:

  • Object.prototype 和 Object.prototype 对象 的区别
  • 对象外面从来不会蕴含另一个对象,只会蕴含另一个对象的地址
  • Function 结构了 Object.prototype 的地址,并没有结构那个对象,Object.prototype 是根对象,然而 不能说 Function 就是根对象,只能说结构出存储根对象地址的属性

Object.prototype 和 Object.prototype 对象 区别:

  • 就代码而言,没方法辨别,只能用内存图来辨别,有 2 个意思
  • Object.prototype 在 Objec 外面,因为这里的 prototype 指 2 个货色:地址和对象,在中文形容时,默认地址就是那个对象。
  • 如果问 Object.prototype 这个地址对应的对象在不在 Object 外面?答复是不在,因为它在门路 #202[toString…](这里内存图轻易一个地址)外面,而 Object 在 prototype:#202 这个地位

JS 世界结构程序

  1. 创立根对象 #101(toString), 根对象没有名字
  2. 创立函数的原型 #208(call/apply), 原型__p 为#101
  3. 创立数组的原型 #404(push/pop), 原型__p 为#101
  4. 创立 Function #342(构造函数),原型__p 为 #208
  5. 让 Function.prototype 等价于 #208(有名字了)
  6. 让此时发现 Function 的__proto__和 prototype 都是 #208
  7. 用 Function 创立 Object(理论没有名字)
  8. 让 Object.prototype 等价于 #101(有名字了)
  9. 用 Function 创立 Array(理论没有名字)
  10. 让 Array.prototype 等价于 #404(有名字了)
  11. 创立 window 对象(不属于 JS 世界)
  12. 用 window 的 ’Object”Array’ 属性将 7 和 9 中的函数命名
  13. 记住一点,JS 创立一个对象,不会给这个对象名字

示例

  • Object.prototype.__proto__ === null
  • Function.prototype.__proto__ === Object.prototype
  • > var f = () => {}
    < undefined
  1. f.__proto__ === Function.prototype
  2. Funciont.__proto__ === Function.prototype
  3. Array.prototype.toString.__proto__ === Funciont.prototype
  4. Object.__proto__ === Function.prototype
  5. Array.prototype === [].__proto__(公式反着用)

正文完
 0