zoukankan      html  css  js  c++  java
  • 后盾人:JS课程第十章(对象)

    1.函数编程与面向对象的实例对比

    let user = {
      name: "XJ",
      grade: [
        {name: "js", score: 99},
        {name: "css", score: 88},
      ],
      average() {
        let total = this.grade.reduce((t, v) => t + v.score, 0)
        return `${this.name}的成绩:${total}`
      }
    }
    console.log(user.average());

    所有和用户user相关的内容(数据、方法等)都放在user对象中

    2.属性基本操作

    let user = {
      name: "XJ",
      "age name": 18,
      }
    user.name 
    user["age name"]
    //两种方法都可以获取值。常用第一种

    3.解构

      解构默认值实现配置合并

    function createElement(options = {}){
      let {width=200,height=100,background='red'} = options
      const div = document.createElement("div")
      div.style.width = width + "px"
      div.style.height = height + "px"
      div.style.backgroundColor = background
      document.body.appendChild(div)
    }
    createElement({120})

    4.Object.assign(a,b)  //合并对象 

    5.对象的封装和抽象

    function User(name, age){
        let data = {name, age } //使用闭包特性对属性进行了抽象化处理
        let info = function(){return data.age > 30 ? "中年":"青年"}
        this.show = function(){
          console.log(`${data.name}的年龄${info()}`);
        }
    }
    let lisi = new User("李四", 30)
    lisi.name = "张三" //此处不会改变构造函数lisi的值
    lisi.info = function() {  //此处不会改变构造函数lisi内的方法
      return ""
    }
    lisi.show() //输出“李四的年龄青年”

     6.对象属性的特征

    Object.entries(arr)   返回一个数组的迭代对象,该对象包含数组的键值对 (key/value)。索引为 key, 元素为 value。

    Object.getOwnPropertyDescriptor("对象", "对象的属性")  查看元素的属性特征,

    Object.getOwnPropertyDescriptors("对象")  查看元素的所有属性特征,

    属性的特征

    {
    “value”: “值”
    “writable”: true//对应属性是否可以写,
    “enumerable”:true//对应属性时候可以遍历/Object.key()是否可以获取
    “configurable”: true //对应属性是否可以被删除/是都可以重新设置
    }

     控制属性特征

    Object.defineProperty(对象, 属性, { 特征设置 })

     
    禁止向对象添加属性
    Object.preventExtensions(对象)
    Object.isExtensible(对象)   //判断是否被禁止添加属性
     
    封闭对象
     Object.seal(对象)
    Object.isSealed(对象) //判断时候封闭
     
    冻结对象
    Object.freeze(对象)
    Object.isFrozen(对象) 判断是否冻结
     
    7.访问器
    set 属性 {}  //修改属性时限制
    get 属性 {}  //获取属性时限制
     访问器伪属性操作
    let lesson = {
       lists: [
         {name: "js", price: 100 },
         {name: "php", price: 99 },
       ],
       get total() {
         return this.lists.reduce((t, l) => t + l.price, 0)
       }
     }
     console.log(lesson.total); //199
     lesson.total = 8000  //不会改变total伪属性
     console.log(lesson.total); //199

    访问器的优先级更高

    8.对象代理 proxy

     基本语法:new Proxy(对象, {方法})

     使用代理实现 Vue 的双向绑定

    <body>
      <input type="text" v-model="title">
      <input type="text" v-model="title">
      <button v-bind="title">
        添加
      </button>
      <hr><br>
      <input type="text" v-model="content">
      <input type="text" v-model="content">
      <button v-bind="content">
        添加
      </button>
    </body>
    <script>
      function View() {
        let proxy = new Proxy(
          {},
          {
            get(obj, property) { },
            set(obj, property, value) { //obj {}  //property 传入的值 //value传入的值
              document.querySelectorAll(`[v-model="${property}"]`).forEach(item => {
                item.value = value  
              })
              document.querySelectorAll(`[v-bind="${property}"]`).forEach(item => {
                item.innerHTML = value
              })
            }
          })
        this.init = function () {
          const els = document.querySelectorAll("[v-model]");
          els.forEach(item => {
            item.addEventListener("keyup", function () {
              proxy[this.getAttribute("v-model")] = this.value  
            })
          })
        }
      }
      new View().init()
    </script>
     
  • 相关阅读:
    关于自定义验证
    8086汇编 零碎杂项
    8086汇编 程序编译
    8089汇编 源程序
    8086 汇编 jmp 指令
    8089汇编 运算符指令
    8086汇编 栈操作
    8086汇编 段寄存器
    8086汇编 Debug 使用
    8086汇编 CPU 寄存结构
  • 原文地址:https://www.cnblogs.com/jidanbufan/p/15215697.html
Copyright © 2011-2022 走看看