在ExtJS的库中,常看到apply关键字。现在就简单介绍下apply在ExtJS用法

1.Ext.apply 和 Ext.applyIf

这里的apply是Ext的内置方法
apply (object,config,[defaults])
将的所有属性复制 config到指定的 object(将config对象 完全复制到 object)
  • object:  对象

属性的接收者。

  • config:  对象

属性的主要来源。

  • defaults:  默认值对象 (可选)

一个也将应用于默认值的对象。

使用例子:

Ext.apply({a:'1'}, {a: '2',b:'1'});
//输出 {a: "2", b: "1"}
Ext.apply({c:'3'}, {a: '2',b:'1'})
//输出 {c: "3", a: "2", b: "1"} 

Ext.apply:若object对象存在与 config对象同名的key,就用 config对象的属性值 覆盖掉object对象里的属性值

applyIf (object,config)

如果尚未将config的所有属性复制到对象,则将它们复制。

  • object:  对象

属性的接收者。

  • config:  对象

属性的主要来源。

使用例子:

Ext.applyIf({a:'1'}, {a: '2',b:'1'})
//输出 {a: "1", b: "1"}
Ext.applyIf({c:'3'}, {a: '2',b:'1'})
//输出 {c: "3", a: "2", b: "1"}

Ext.applyIf:object对象中不含有 config对象的属性,就将其从config对象中复制过来

2.控件的apply使用

有时我们在开发中,想要自定义一些控件,这些控件里可能包含config配置项,config里又含有子组件,例如下面的例子:

Ext.define('A',{extend:'Ext.Container',xtype:'a',config:{child:{xtype:'textfield'}}
})

上述代码中,我们定义了一个A类,这个A类是个带有输入框的container容器,希望通过getChild()能获取到textfield 实例对象。

若是我们实例化一下,这个控件A:

var objA = Ext.widget('a');//实例化A类
objA.getChild();//访问自定义的子孩子
//输出 {}

 发现输出的是{};

若我们在实例化时加上child配置项:

var objA = Ext.widget('a',{child:{xtype:'textfield'}});//实例化A类
objA.getChild();//访问自定义的子孩子
//输出 {xtype: "textfield"}

可以看到,输出的是个object对象,并不是我们想要的textfield的实例。

这个时候,就要用apply构造方法改造下A类:

Ext.define('A',{extend:'Ext.Container',xtype:'a',config:{child:{xtype:'textfield'}},applyChild(child) {if (child) {child = Ext.create(Ext.apply({}, child));//child是指child的配置项}else child = Ext.create(Ext.apply({}, {xtype: 'textfield'}));return child;}
})

在config里声明的属性,Extjs会帮助其生成 get和set访问器,详见 ExtJs config的使用,除此之外,还有apply方法

config:{aBC:''
}

就会有个

applyABC() 和 updateABC()方法

apply方法的基类,就是ExtJS的 Function类里的apply

Function apply

apply ( thisArg, argsArray )

使用apply,您可以编写一个方法,然后在另一个对象中继承它,而不必为新对象重写该方法。其他解释详见apply

  • thisArg:  对象

为函数function调用提供的值。请注意,这可能不是该方法看到的实际值:如果该方法是非严格模式代码中的函数,则null和undefined将被全局对象替换,原始值将被装箱。

  • argsArray:  数组

类似于object的数组,指定应调用fun的参数,如果不向函数提供任何参数,则为null或undefined。

例子:

有个方法或者叫函数 Product ,里面有商品名 和 价格 以及一个显示方法

function Product(name, price) {this.name = name;this.price = price; this.show = function() {console.log('价格是'+ price);}
}

此时若我们在其他地方 建了个食物的类,它也是商品,也想具有上面的属性,就可以用apply了

function Food(name, price) {Product.apply(this, arguments);this.category = 'food';
}

若此时我们实例化一下Food,

var cheese = new Food('feta', 5);

输出一下cheese

可以看到food类有product类的方法

[ExtJS] 一文搞懂 apply 使用相关推荐

  1. 一文搞懂 Traefik2.1 的使用

    原文链接:一文搞懂 Traefik2.1 的使用 一文搞懂 Traefik2.1 的使用 核心概念 安装 ACME 中间件 灰度发布 流量复制 TCP 简单 TCP 服务 带 TLS 证书的 TCP ...

  2. 一文搞懂 Raft 算法

    一文搞懂Raft算法 正文 raft是工程上使用较为广泛的强一致性.去中心化.高可用的分布式协议.在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos.但Paxos是:少数真正理 ...

  3. 一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  4. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  5. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

  6. 一文搞懂 Java 线程中断

    转载自   一文搞懂 Java 线程中断 在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程 ...

  7. 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm

    ***一文搞懂HMM(隐马尔可夫模型)*** 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序, ...

  8. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

  9. 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass

    本文将对蓝图类UBlueprint的几个UClass成员变量NativeClass.GeneratedClass.BlueprintClass.ParentClass进行比较深入的讲解,看完之后对蓝图 ...

最新文章

  1. 获取AppStore上架后的应用版本号
  2. android ListView 局部刷新
  3. SHA-1算法c语言实现
  4. Uva 10004(二分图的判定)
  5. smokeping with tcpping centos 7 环境
  6. c语言飞机订票系统作用,C语言飞机订票系统方案
  7. windows cmd中的%~dp0
  8. OA多级审批流程表设计方案(干货满满)
  9. Ubuntu系统中文输入法配置安装(谷歌拼音)
  10. 如何安装浏览器插件,一篇文章全搞定
  11. 计算机代表的数字,计算机中数的表示
  12. 511遇见易语言子程序参考的作用
  13. 关于Linux和Windows一个对比
  14. 华师大计算机考研825,2020华东师范大学计算机/软件专业课改考408
  15. KVM 自定义存储与磁盘挂载
  16. excel多次使用格式刷的方法步骤
  17. verilog中initial语句的基本使用
  18. JavaScript奇淫技巧:把JS编译成exe
  19. Swift Publisher 5 for Mac(快速版面设计软件)
  20. 视频教程-Cocos2d-x 游戏开发详解-Cocos

热门文章

  1. 中企海外周报 | Vivo进一步拓展中东和非洲市场;一加将携首款概念机亮相2020 CES展...
  2. 了解模型预测控制5--如何加速运行MPC
  3. Golang Devops项目开发(1)
  4. 一道归并排序题的解析
  5. LabVIEW开发的测试设备软件代码和PLC程序
  6. Kivy之Label标签标记markup
  7. mondrian olap 示例_Mondrian数据库olap应用文档
  8. 外贸英语900句之 询盘 Inquiry
  9. 最详尽翻译:Rules of Machine Learning: Best Practices for ML Engineering
  10. python通过ip池爬_python 爬虫 代理ip池(适合初学者)