zoukankan      html  css  js  c++  java
  • js 魔鬼训练

    1、Object.assign 偷梁换柱 / 融合
      - 将多个对象合并到第一个对象中去。这样一来methods对象中就包含着data对象了。否则this无法正常访问data中的title
    var news={
      data(){
          return {
              id:101,
              title:"新闻标题"
          }
      },
        methods:{
            show()
            {
                alert(this.title)
            }
        }
    };
     Object.assign(news.methods,news.data())
     news.methods.show()
      

     2、限制与规则

    var God={
        version:"1.0",
        extends(name,obj) {
            if("data" in obj && "methods" in obj && typeof obj.data=="function" && typeof obj.methods=="object" ) {
                var getData=obj.data();
                if(typeof getData=="object") {            
                    Object.assign(obj.methods,getData);
                    this[name]=obj;
                }
            }
        }
    };
    
    
    var news={
        data () {
          return {
              id:101,
              title:"新闻标题"
          }
        },
        methods:{
            show() {
                alert(this.title)
            }
        }
    };
    
     God.extends("news",news);
     God.news.methods.show()

     3、 Object.defineProperty 设置属性为不可枚举

    var God={
        version:"1.0",
        extends(name,obj)
        {
            this.init();
            if("data" in obj && "methods" in obj && typeof obj.data=="function" && typeof obj.methods=="object" )
            {
                var getData=obj.data();
                if(typeof  getData=="object")
                {
                    Object.assign(obj.methods,getData,this);//把传入对象的Data 合并进入对象的methods
                    this[name]=obj; //给GOD对象设置一个属性 (根据参数和参数值)
                }
            }
        },
        init() //初始化
        {
            Object.defineProperty(this,"init",{
                enumerable:false  //设置属性为不可枚举
            })
            Object.defineProperty(this,"extends",{
                enumerable:false
            })
    
            var keys=Object.keys(this);
            this.$global={};
            keys.forEach((key)=>{
                this.$global[key]=this[key];
            });
        }
    };
  • 相关阅读:
    枚举和字符串转换
    JavaScript string.format
    Jquery 中toggle的用法举例
    JQuery 实现倒计时
    找位置
    图算法
    文件操作总结
    动态规划——总结
    回文字符串
    a+b_1
  • 原文地址:https://www.cnblogs.com/CyLee/p/6266542.html
Copyright © 2011-2022 走看看