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];
});
}
};

js 魔鬼训练的更多相关文章

  1. codefordream 关于js中级训练

    中级训练接着就紧锣密鼓的开始了. 首先是关于变量,变量的作用是给一个数据值标注名称. 注:JavaScript中变量名,函数名,参数名的命名规范:至少由字母,下划线,美元符号,数字其中的一种组成,但不 ...

  2. codefordream 关于js初级训练

    这里的初级训练相对简单,差不多都是以前知识温习. 比如输出“hello world”,直接使用console.log()就行.注释符号,“//”可以注释单行,快捷键 alt+/,"/*   ...

  3. php 魔鬼训练

    环境配置 找到自己的[系统命令行]目录:bin /usr/bin #mac系统 /bin #ubuntu系统 再找到Php的编译器,这个根据你的安装路径来判断,mac默认的路径如下 cd /usr/b ...

  4. 接下来一段时间会对大家进行网络通信的魔鬼训练-理解socket

    引子 下一篇标题是<深入理解MQ生产端的底层通信过程>,建议文章读完之前.或者读完之后,再读一遍我之前写的<RabbitMQ设计原理解析>,结合理解一下. 我大学时流行过一个韩 ...

  5. p90x 涵盖了全部方式的健身方式美国经典训练DVD

    http://baike.baidu.com/view/2602721.htm  p90x是美国经典训练DVD, 涵盖了全部方式的健身方式13张Beachbody P90X DVD全集,90天魔鬼训练 ...

  6. 三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速

    前文:三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署 TensorFlow 模型导出 使用 SavedModel 完整导出模型 不仅包含参数的权值,还包含计算的流程(即计算 ...

  7. 一些JS库汇总

    作者:wlove 链接:https://www.zhihu.com/question/429436558/answer/2348777302 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ...

  8. 洛谷 题解 P3984 【高兴的津津】

    潇洒の开始 大水题一枚/小声说话 先吐槽一下: 为什么津津经历了魔鬼训练就可以Au日常QWQ,人家也是早起晚睡的好吧 (谁说魔鬼训练就一定是早起晚睡的) 思路 津津的高兴是持续m天的,但是一旦在这m中 ...

  9. Java Web 笔记(1)

    JavaWeb 学习笔记,狂神说java,链接:https://www.bilibili.com/video/av68833391 Java Web 1.基本概念 1.1.前言 web开发: web, ...

随机推荐

  1. 修改CMD命令窗口编码并保存方法

    我们经常出现的情况是命令行窗口乱码,默认的cmd窗口显示的中文是GBK编码,要是输出utf-8的就可能会乱码了,那么怎么修改呢. 打开的命令窗口,如果我们要修改成UTF8编码,输入命令: CHCP 6 ...

  2. C# RSA加密/解密

    RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力的公钥加密算法, ...

  3. 对象的内置属性和js的对象之父Object()

    js中对象有constructor,valueOf(),toString()等内置属性和方法; 创建一个空对象的方法: var o = {}; 或者 var o= new Object(); o.co ...

  4. 【JQuery学习历程】2.JQuery选择器

    基本选择器 选择器 描述 返回 示例 #id 根据给定的id匹配元素 单个元素 $("#myId") .class 根据给定的class类匹配元素 集合元素 $(".my ...

  5. xamp配置多域名站点

    xampp配置多站点出现,htdocs目录和虚拟目录二者只能选其一的情况,我的xampp安装在D:\xampp\,默认web根目录在D:\xampp\htdocs,然后我在D:\magento安装了m ...

  6. CentOS 6.3 卷组挂载硬盘教程 linux的VPS如何分区

    XEN架构VPS提供的容量一般都不会低于10G,但大部分基于Xensystem面板的VPS默认挂载10G硬盘(第一磁盘),剩下的容量(第二磁盘)就需要通过手动挂载才能扩充默认的10G容量了.默认装完系 ...

  7. 【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)

    2.4  启动与停止(Starting and Stopping) 2.4.1  立即启动(Start Instantly) 通常来讲,用户不会花超过两分钟的时候去评价一个新的应用.在这段有限的时间里 ...

  8. 转: 静态模式makefile中$(cobjs): $(obj)/%.o: $(src)/%.c

    4.12 静态模式静态模式规则是这样一个规则:规则存在多个目标,并且不同的目标可以根据目标文件的名字来自动构造出依赖文件.静态模式规则比多目标规则更通用,它不需要多个目标具有相同的依赖.但是静态模式规 ...

  9. 搭建一个 简易的php版 todolist

    我记得以前使用 wunderlist 但是国外..后来用了半年. 挺方便的.但是.后来慢慢忘了这工具存在 缺少了todolist.效率折半.. so.我搭建了个简单的todolist.  :mytin ...

  10. [BZOJ - 2819] Nim 【树链剖分 / DFS序】

    题目链接: BZOJ - 2819 题目分析 我们知道,单纯的 Nim 的必胜状态是,各堆石子的数量异或和不为 0 .那么这道题其实就是要求求出树上的两点之间的路径的异或和.要求支持单点修改. 方法一 ...