js 魔鬼训练
2023-09-11 14:16:39 时间
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]; }); } };
相关文章
- php+js 防止被抓包篡改数据,数据签名校验
- JS框架_(JQuery.js)纯css3进度条动画
- JS框架_(JQuery.js)文章全屏动画切换
- JS框架_(JQuery.js)Tooltip弹出式按钮插件
- JS框架_(JQuery.js)动画效果鼠标跟随
- JS框架_(Esign.js)仿信用卡电子签名特效
- JS框架_(Qrcode.js)将你的内容转换成二维码格式
- js笔记——js里的null和undefined
- baguetteBox.js响应式画廊插件(纯JS)
- js延迟加载的性能优化
- Js基础知识3-字符串、正则表达式全解
- JS插件之——bootstrap-suggest.js
- echart.js 和 chart.js 改变圆点大小
- 10.Node.js核心模块
- [Node.js] Mock an API for Local Development in React with Mirage JS
- js 兼容屏幕的高度
- [Node.js] Mock an API for Local Development in React with Mirage JS
- atitit.js的 字符串内容 转义 js处理html
- 华为OD机试 - 单词接龙(Java & JS & Python)
- js点击当前复制内容demo效果示例(整理)
- 【华为OD机试 2023】组合出合法最小数(C++ Java JS Python)
- Node.js:MD5加密字符串
- JS:使用Mock.js生成随机数据,拦截 Ajax 请求
- babel配置项目目录支持转换es6语法,引入非项目目录js后,引入Js转换无效
- 使用Jasmine和karma对传统js进行单元测试
- 华为校招机试 - 攻城战(Java & JS & Python)