l   一、静态的变量和静态的方法 【译文原创Learning Ext JS 4 第51页】

Statics的方法只属于类本身,而不属于任何一个实例,这就决定了我们是在定义类的内部来用statics方法的,而不是在某个实例中。

现在,我要建立一个在银行排队叫号的类,排队的人就象是在流水线上一样,每个人都有一个不重复的顺序号,代码如下。    

//定义一个客户类,只需要顺序号,别的什么也不需要。

Ext.define('MyApp.data.Client',{

statics        : {                                  //1

                                                   sequence   : 0,

                                                   nextId                  : function(){                                                                         

                                          return   ++this.sequence;                                                                                                       

                }

                                 },

//使用构造函数,创建1个实例就加1。//第2步.

constructor : function(){

this.id=              this.self.nextId();         //去调用类本身的静态方法,做加1处理

//console.log(this.id);

}

});

  //begin,因为静态属于类,学习直接使用类名本身调用静态的变量和静态的方法。

Ext.create('MyApp.data.Client');

console.log(MyApp.data.Client.sequence+' 号产生了!');

Ext.create('MyApp.data.Client');

console.log(MyApp.data.Client.sequence+' 号产生了!');

Ext.create('MyApp.data.Client');

console.log(MyApp.data.Client.sequence+' 号产生了!');

console.log(MyApp.data.Client.nextId()+' 号意外的产生了,这是直接使用了类本身来调用自己的静态方法,而有产生某个实例人,可以肯定这是个假号!');

代码完毕,执行结果如下:

      

•       第1步:我们在类定义内使用了statics静态,这将决定着这个类在创建实例的时候将会启用statics预处理机制。我们已经建立了sequence顺序号属性和nextId方法,这2个将打上statics标志添加到类中,而且,还可以根据你的需要随意的添加。

•       第2步:在类定义中,我们使用了self指针来访问类,Ext对于每一个实例的static内部预处理机制中都建立了这个指针。

使用这样的方式来调用静态类型的变量:

MyApp.data.Client

使用下面这样的方式来调用静态方法。

MyApp.data.Client.nextId();

二、statics 静态的深入理解【译文原创Ext.JS.4.First.Look 第26页】

在Ext JS 4中,任何一个类都可以建立静态的方法,这样做的好处就是直接使用该类名本身来调用方法而不象以前那样创建实例然后再用实例去调用某个方法,调用方式为:

类名.静态变量名。或者:类名.静态方法名,例子:MyApp.Math.count或者MyApp.Math.sum(10,5)

静态的变量和静态的方法定义,代码如下,

 Ext.define('MyApp.Math',{

                 statics    : {
count : ,
appname : '数学',
sum : function(number1,number2){
return number1+number2; }
},
//使用构造函数,创建1个实例就加1,好明白有多少个实例。
constructor : function(){
++this.statics().count;
//console.log(this.statics().count);
}
});

这个类包含了2个静态的变量属性---count和appName,根据第1段的理解我们在没有创建任何实例的情况下就可以直接使用它,

如下直接调用变量:

MyApp.Math.count

MyApp.Math.appname

可以这样:MyApp.Math.sum(10,5)来直接调用静态方法。

现在, 看一下在statics括弧之外是如何调用的,以构造函数为例子,这就需要使用this.statics()该种方式来访问了,this.statics().count,当你使用this.self.属性名 这种格式,能否调用取决于你所指向的实例。

题后话:下面我们来看一下statics有了在继承的情况,有了子类会怎样:

一句话,statics有了子类的情况,情况就发生了严重变异,公共的静态就不在是公共的了。明白的说,静态的count到了子类就不再是公共类型了,静态的方法sum()也就不再是公共的了sum()了。我们在子类中就再也不能使用MyApp.Math2.count或MyApp.Math2.sum(5,0),

寻找答案?

      用statics的静态成员和方法有了子类后,在子类中的静态成员和方法到底变成了什么类型?谢谢

Ext JS 4 老特征:statics 静态的变量和方法的更多相关文章

  1. java继承时能包括静态的变量和方法吗?举例说明!

    子类继承了超类定义的所有实例变量和方法包括静态的变量和方法(马克-to-win见下例),并且为它自己增添了独特的元素.子类只能有一个超类.Java不支持多超类的继承. 子类拥有超类的所有成员,但它不能 ...

  2. js判断网页是真静态还是伪静态的方法

    现在很多网站都是使用以“.html“为扩展名的网页,这样做的好处是有利于搜索引擎收录和排名,或者是其他目的,如可以缩短网址使人容易记住.不过有意思的是并不是所有的以“.html”扩展名的网页都是静态的 ...

  3. js赋值后,不影响源变量的方法。

    以前都没发现这个问题,特记录一下. var productListData={pages:001}; var data=productListData;//这样就会有问题. data=$.extend ...

  4. Ext JS 4 的类系统

    前言 我们知道,JavaScript中没有真正的类,它是一种面向原型的语言 .这种语言一个强大的特性就是灵活,实现一个功能可以有很多不同的方式,用不同的编码风格和技巧.但随之也带来了代码的不可预测和难 ...

  5. Ext JS 4 新特性2:配置项属性(config)之二

    Ext JS 4 新特征2:配置项属性config之二 ☞ Config(自动的setters和getters) Ext JS 4介绍了config声明方式,在Ext JS 中也有几个例子:在运行程序 ...

  6. Ext JS 4 新特性2:配置项属性(config)之一

    Ext JS 4 新特征2:配置项属性config 最新版本的Ext JS 4.2的另外一个伟大的新特征就是增加了configuration配置项属性,当我们在创建一个新类的时候,经常性的要设置某某属 ...

  7. [Ext JS 4] 实战之Grid, Tree Gird 添加按钮列

    引言 贴一个grid 的例子先: 有这样一个需求: 1. 给 Grid(or Tree Grid)添加一列, 这一列显示是Button. 点击之后可以对这一行进行一些操作 2. 这一列每一行对应的按钮 ...

  8. [Ext JS 4]性能优化

    一般的优化技巧 1. 检查你定义的时间监听器 正确的设置事件监听器对性能会有很大的影响. 举例来说, 在定义一个store的时候,设置一个load 的事件去触发从后台读取数据,如果设置single 的 ...

  9. ext之关键字mixins、statics、require

    1.mixins 说明:类似于面向对象中的多继承 <script type="text/javascript"> Ext.onReady(function () { / ...

随机推荐

  1. CSS3动画特效——transform详解

    transform让css3可以做很优质的特效,transform的意思是:改变,使-变形,转换. 在css3中transform的作用也是改变,让元素倾斜,旋转,缩放,位移. 下面来一一分解tran ...

  2. angular中ng-repeat ng-if 中的变量的值控制器中为什么取不到

    这个问题的本质是:v-repeat会产生子scope,这时你在控制器里拿值,相当于父scope里面取子scope的值,因为Angular.js中作用域是向上查找的,所以取不到. 操作过程如下: 相关代 ...

  3. c++程序判断系统是Linux还是Windows

    用C++来实现,本来想了很多,后来越写越烂,而且结果总是不尽人意,干脆这样子好了: int main() { int judge = system("cls"); ) cout & ...

  4. js实现div层缓慢收缩与展开的方法

    引脚本之家 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/T ...

  5. 哈希表(Hash Table)

    参考: Hash table - Wiki Hash table_百度百科 从头到尾彻底解析Hash表算法 谈谈 Hash Table 我们身边的哈希,最常见的就是perl和python里面的字典了, ...

  6. 移动端html模版

    <!DOCTYPE html><html><head> <title>时钟</title> <meta charset="u ...

  7. 如何修改file控件

    在移动web开发过程中,常常会用到input file这控件,但css不能修改其样式往往让开发者很头疼,直接把他放到页面上又不美观: 下面介绍的方法,可以将该控件的显示样式替换成一个图标:   该方法 ...

  8. html slelect 标签默认值

    <select name="channelCode" id="channelCode" class="all_input" style ...

  9. Linux内核分析课程总结

    Linux内核分析课程总结 By 20135203齐岳 知识梳理 (思维导图地址http://mindmap.4ye.me/mkxM0cFh/1) 从start _ kernel构造一个新的Linux ...

  10. Web cookie 详解

    总结:服务端客户端变量建议都是用 utf-8字符集, 前后传递的变量都建议使用url编码处理.php setcookie 保存到客户端的变量会自动url编码的, 所以客户端获取后需要decodeURI ...