写代码啦
JS三座大山之原型
回复数(0) 浏览数(23)
{{topic.upvote_count || 0}} 编辑 回复

一 、 对于JS原型需要记住的重要的三大理论

  1. 对象.proto = 构造函数.prototype
  2. Object.prototype 是所有对象的(直接或间接)原型
  3. 所有函数都是由Function构造的,所以任意函数.proto ===Function.prototype(任 意函数:数组(Array)函数,对象(Object)函数,函数(Function)函数)

二、三大拨乱反正

  1. 乱:当说某个原型时,不确定是proto 还是 prototype
    正:任何函数的原型都是指 proto
    • {‘name’:'frank'}的原型,{'name':'frank'}.proto === Object.prototype
      就如同 var obj = {‘name’:'frank'},obj.proto === Object.prototype,obj 是定义的对象,所以构造函数是Object
    • [1,2,3]的原型 [1,2,3].proto=== Array.prototype
    • Object的原型 Object.proto === Function.prototype(看Object的构造函数,从上面的理论三就可以看出来)
  2. 乱:Object.prototype不是根目录,因为Object是Function构造的,所以Function构造了Object.prototype,Function应该死万物之源
    正:Object.prototype是根目录
    因为Object.prototype是一个地址,不是个函数,所以不是Function构造的
    Object.prototype这个地址在Object里是Function构造的,但是它的地址所指向的对象不在Object里面不是Function构造的
  3. 乱:[1,2,3]的原型为Array.prototype与Object.prototype是所有对象的原型矛盾
    正:[1,2,3]的直接原型时Array.prototype 间接原型是Object.prototype
    对于普通对象来说,Object.prototype是直接原型
    对于数组,函数来说,Object.prototype是间接原型

三、JS世界

var obj = {},则 obj.proto ===Object.prototype
Object.proto === Fucntion.prototype
var arr=[],则 arr.proto === Array.prototype
Array.proto === Fucntion.prototype
var fn=()=>{},则fn.proto === Function.prototype
Function.__proto===Function.prototype
Object,Array,Function 是window的三大函数,任何函数都是由Function构造的
Object,Array,Function分别是obj,arr,fn的直接构造函数,Function是间接构造函数
所以就有了直接原型和间接原型

根目录的原型时null,即Object.prototype.proto===null

以上内容主要来源于饥人谷前端体系课

{{topic.upvote_count || 0}}

一 、 对于JS原型需要记住的重要的三大理论

  1. 对象.proto = 构造函数.prototype
  2. Object.prototype 是所有对象的(直接或间接)原型
  3. 所有函数都是由Function构造的,所以任意函数.proto ===Function.prototype(任 意函数:数组(Array)函数,对象(Object)函数,函数(Function)函数)

二、三大拨乱反正

  1. 乱:当说某个原型时,不确定是proto 还是 prototype
    正:任何函数的原型都是指 proto
    • {‘name’:'frank'}的原型,{'name':'frank'}.proto === Object.prototype
      就如同 var obj = {‘name’:'frank'},obj.proto === Object.prototype,obj 是定义的对象,所以构造函数是Object
    • [1,2,3]的原型 [1,2,3].proto=== Array.prototype
    • Object的原型 Object.proto === Function.prototype(看Object的构造函数,从上面的理论三就可以看出来)
  2. 乱:Object.prototype不是根目录,因为Object是Function构造的,所以Function构造了Object.prototype,Function应该死万物之源
    正:Object.prototype是根目录
    因为Object.prototype是一个地址,不是个函数,所以不是Function构造的
    Object.prototype这个地址在Object里是Function构造的,但是它的地址所指向的对象不在Object里面不是Function构造的
  3. 乱:[1,2,3]的原型为Array.prototype与Object.prototype是所有对象的原型矛盾
    正:[1,2,3]的直接原型时Array.prototype 间接原型是Object.prototype
    对于普通对象来说,Object.prototype是直接原型
    对于数组,函数来说,Object.prototype是间接原型

三、JS世界

var obj = {},则 obj.proto ===Object.prototype
Object.proto === Fucntion.prototype
var arr=[],则 arr.proto === Array.prototype
Array.proto === Fucntion.prototype
var fn=()=>{},则fn.proto === Function.prototype
Function.__proto===Function.prototype
Object,Array,Function 是window的三大函数,任何函数都是由Function构造的
Object,Array,Function分别是obj,arr,fn的直接构造函数,Function是间接构造函数
所以就有了直接原型和间接原型

根目录的原型时null,即Object.prototype.proto===null

以上内容主要来源于饥人谷前端体系课

23
回复 编辑