JS对象分类

192 阅读2分钟

JS对象分类

构造函数

  • new X()自动做了四件事情

    • 自动创建空对象
    • 自动为空对象关联原型,原型地址指定为X.prototype
    • 自动将空对象作为this关键字运行构造函数
    • 自动return this
  • 构造函数X

    • X函数本身负责给对象本身添加属性
    • X.prototype对象负责保存对象共用属性
 function Square(width){
     this.width=width
 }
 Square.prototype.getArea = function(){
     return this.width * this.width
 }
 Square.prototype.getLength = function(){
     return this.width * 4
 }
 let square = new Square(5);
题外话:代码规范
  • 大小写

    • 所有构造函数(专门用于创建对象的函数)首字母都要大写
    • 所有被构造出来的对象,首字母小写
  • 词性

    • new 后面的函数,使用名词形式
    • 如new Person()、new Object()
    • 其他函数,一般使用动词开头
    • 如createSquare(5)、createElement('div')

接下来总结一个重要的公式

如何确定一个对象的原型

  • 为什么
 let obj = new Object()的原型是Object.prototype
 let arr = new Array()的原型是Array.prototype
 let square = new Square()的原型是Square.prototype
 let fn= new Function()的原型是Function.prototype
  • 因为new操作故意这么做的

newX()自动做了四件事 详细看上文

结论:你是谁构造的,你的原型就是谁的prototype属性对应的对象

原型公式:

 对象._proto_ === 其构造函数.prototype

回归标题:对象需要分类么?

需要分类

  • 理由一

    • 有很多对象拥有一样的属性和行为,需要把它们分为同一类
    • 如square1和square2,这样创建类似对象的时候就很方便
  • 理由二

    • 但是还有很多对象拥有其他的属性和行为,所以就需要不同的分类
    • 比如Square/Circle/Rect就是不同的分类
    • Array/Function也是不同的分类
    • 而Object创建出来的对象,是最没有特点的对象
类型 VS 类
  • 类型

    • 类型是JS数据的分类,有7种
    • 四基两空一对象
    • 类是针对于对象的分类,有无数种
    • 常见的有Array、Function、Date、RegExp等
数组对象
  • 定义一个数组
 let arr = [1,2,3]
 let arr = new Array(1,2,3) //元素为1,2,3
 let arr = new Array(3) //数组长度为3
  • 数组对象的自身属性

    • '0'/'1'/'2'/'length'
    • 注意,属性名没有数字,只有字符串
  • 数组对象的共有属性

    • 'push'/'pop'/'shift'/'unshift'/'join'
    • 用法都在MDN
函数对象
  • 定义一个函数
 function fn(x,y){return x+y}
 let fn2 = function fn(x,y){return x+y}
 let fn = (x.y) => x+y
 let fn = new Function('x','y','return x+y')
  • 函数对象自身属性

    • 'name'/'length'
  • 函数对象共有属性

    • 'call'/'apply'/'bind'
JS终极一问
  • window是谁构造的

    • Window
    • 可以通过constructor属性看出构造者
  • window.Object是谁构造的

    • window.Function
    • 因为所有函数都是window.Function构造的
  • window.Function是谁构造的

    • windowsFunction
    • 自己构造自己?并不是这样的,这是浏览器构造了Function,然后指定它的构造者是自己

\