美文网首页
JS对象分类

JS对象分类

作者: 郑馋师 | 来源:发表于2019-09-29 19:11 被阅读0次

    分类原因:
    分类就可以少占内存

    new语法

    将函数与原型结合

    函数的特征

    1. 都有prototype属性,存储原型地址
    2. 每个prototype都有一个constructor属性,是来告诉别人构造这个属性的爹是谁

    new语法的写法和特征

    newX()
    特征

    1. 自动创建一个新的对象
    2. 自动为空对象关联原型,原型地址为X.prototype
    3. 自动将不知道叫什么的空对象,作为this语法的关键字,来运行构函数(构造函数是指创建对象的函数)
    4. 自动return this
      eg.
    function Person(name, age) {//()里写变量名,function Person{}里面写自身所有属性
      this.name = name;
      this.age = age;
    }
    Person.prototype.sayHi = function() {//这里Person.prototype.后面加共有属性的名字,且下面写的是共有属性
      console.log("你好,我叫" + this.name);
    };
    let person = new Person("frank", 18);
    person.name === "frank"; // true
    person.age === 18; // true
    person.sayHi(); // 打印出「你好,我叫 frank」
    
    

    构造函数X(名字为X)

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

    规范

    1. 大小写
    • 所有构造函数首字母大写,被构造的对象首字母小写
    1. 词性
    • 构造函数中,new后面的函数名字为名词
      eg
      new Person()
    • 其他函数用动词开头
      eg.
      createSquare
      Tips:
      Js构造函数不一定只有一个参数,具体的可以看mdn文档

    class 语法

    1. JS 构造对象目前有两种方式,一种是用构造函数+prototype(new语法),一种是用 class,关于这两种方式,两者方式 JS 都支持,JS 是一门包容的语言,提供了多种表达形式,两者方式都能表达程序员的思想。
    2. 构造函数+prototype 是先提供的,class 是后提供的,说明 构造函数+prototype 是 JS 一开始的基因,而 class 的粉丝其实更喜欢 class,所以两种都有必要学习。
      class是es6新出的功能,与prototype那个语法功能相同
      eg.
      constructor(name, age) {//()里面写的是变量名
        this.name = name;//{}constructor里面写的是自身所有属性
        this.age = age;
      }
      sayHi() {//constructor外面外面这里写的是公有属性,Sayhi是共有属性的名字
        console.log("你好,我叫" + this.name);
      }
    }
    let person = new Person("frank", 18);
    person.name === "frank"; // true
    person.age === 18; // true
    person.sayHi(); // 打印出「你好,我叫 frank」
    
    

    数组对象

    1. 定义数组
    let arr=[1,2,3]===let arr=new Array(1,2,3)
    

    2.自身属性:长度(无法用object.keys查出)

    1. 常用API,上mdn查

    函数

    1. 定义函数
      eg.
    function fn(x,y){return x+y}
    ===let fn=function fn(x,y){return x+y}
    ===let fn=(x,y)=>{x+y}
    ## 原型公式
    如何确定原型:
    

    let obj=new Object()

    new什么,就是什么.prototype,比如这里就是Object.prototype
    对象.___proto___===构造函数.prototype
    ## 坑
    1. 属性不等于属性值,属性是名,是key,属性值是值。
    2. JS类型不等于JS分类,类型是四基而空一对象,分类的是只有对象有分类,
    JS 中的类型有:数字、字符串、布尔、符号Symbol、null、undefined、对象
     JS 中的类有:对象 Object、数组 Array、函数 Function 等
    3. Object.prototype
    * 是一个对象(这么说不严谨,应该说 Object.prototype 保存着一个对象的地址)
    * 包含了 toString、valueOf、hasOwnProperty 等对象共有的属性
    * Object.prototype 是所有对象的原型(除了它自己)
    * Object.prototype 自己的原型为 null,Object.prototype 是根对象
    4. window.Object 是一个函数对象,那么这个函数对象的构造函数是Function
    5. window.Function 是一个函数对象,那么这个函数对象的构造函数是Function
    6. window.Object 是一个函数对象,那么这个对象的 __proto__ 是Function.prototype
    7. window.Function 是一个函数对象,那么这个对象的 __proto__ 是Function.prototype

    相关文章

      网友评论

          本文标题:JS对象分类

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