美文网首页
js原型、原型链

js原型、原型链

作者: fanison | 来源:发表于2019-12-11 22:51 被阅读0次

    为什么需要对象分类?

    • 类型是对 JS 中数据的分类
      JS 中的类型有:数字、字符串、布尔、符号Symbol、null、undefined、对象
    • 类是对 JS 中对象的分类
      JS 中的类有:数组 Array、函数 Function 、Date、RegExp等

    new操作符

    创建new X()时做了什么?

    • 自动创建空对象
    • 自动将空对象关联原型,原型地址指定为X.prototype(即将 X.prototype保存的地址复制到 空对象.__proto__里)
    • 自动将空对象作为this关键字运行构造函数
    • 自动return this

    构造函数X

    • X函数本身负责给对象本身添加属性
    • X.prototype对象负责保存对象的共用属性

    JS 构造对象方式

    代码规范

    • 大小写
      所有构造函数(专门用于创建对象的函数)首字母大写
      所有被构造出来的对象,首字母小写
    • 词性
      new后面的函数,使用名词形式(new Person()new Object())
      其他函数,一般使用动词开头(createSquare()createElement('div'))

    方式一:用 class

    Example:

    class Square{
      static x = 1
      width = 0
      constructor(width){
        this.width = width
      }
      getArea(){
        return this.width * this.width
      }
      get length(){ //只读属性
        return this.width * 4
      }
    }
    let square = new Square(5)
    square.width
    square.getArea()
    square.length()
    

    方式二:用构造函数+prototype

    自己定义构造函数Rect,函数里给this加属性
    Rect自动创建prototype属性和对应的对象 #207
    在Person.prototype #207 上面加属性
    用new Rect() 创建对象 react
    new会将Rect的原型 __p设为 #207

    function Rect(width, height){
      this.width = width
      this.height = height
    }
    Rect.prototype.getArea = function(){
      return this.width * this.height
    }
    Rect.prototype.getLength = function(){
      return (this.width + this.height) * 2
    }
    let react = new Rect(4,5)
    rect.width
    rect.height
    rect.getArea()
    rect.getLength()
    

    原型

    let obj = new Object()     //原型 Object.prototype
    let arr =new Array()       //原型 Array.prototype
    let square = new Squrae()  //原型 Square.prototype
    let fn = new Function()    //原型 Function.prototype
    

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

    Test1: let x = {} x的原型是什么
    x.__proto__ = Object.prototype

    Test2:
    Object.prototype的构造函数: 无
    Object.prototype的原型: null
    Object.prototype.__proto__的原型 : null

    Test3:
    window是谁构造的?
    Window()
    window.Object是谁构造的?
    window.Function
    window.Function是谁构造的?
    window.Function

    Test4:多选题



    JS公式:

    根公理:

    函数公理:


    Test

    相关文章

      网友评论

          本文标题:js原型、原型链

          本文链接:https://www.haomeiwen.com/subject/qxoagctx.html