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. C# 利用NPOI 实现Excel转html

    public void ExcelToHtml(string fileName, IWorkbook workbook) { ExcelToHtmlConverter excelToHtmlConve ...

  2. 02.JavaScript 面向对象精要--函数

    在JavaScript中,函数其实也是对象.是函数不同于其他对象的特点是:函数存在一个被称为[[Call]]的内部属性.[[Call]]属性是函数独有的,表明该对象可以被执行.ECMAScript 定 ...

  3. PUTTY用密钥登陆服务器

    1.puttygen生成private_key和public_key,保存private_key: 2.在 ~/.ssh/authorized_keys中添加public_key,(vi ~/.ssh ...

  4. ios回调函数的标准实现:protocol+delegate

    一.项目结构

  5. Sql Server中实现Mysql中的group_concat函数效果

    ), GuestName) , , '') as CustomerName FROM orderitem oi 以上涉及的两个表是OrderItem和Guest,以属性OrderSN和ItemId连接 ...

  6. 【oracle】 oracle学习笔记1--安装与登录

    由于机器配置原因,加上也是自学,所以就没必要安装专业版的oracle,于是就安装的oracle xe版本 下载地址:http://www.oracle.com/technetwork/database ...

  7. UIautomator Python测试

    #!/usr/bin/env python # -*- coding: utf-8 -*- import unittest from mock import MagicMock, patch impo ...

  8. (44) odoo中的WebService

    * 前言   erp系统会和其它系统进行对接,这时就要接口,官方给出的是两解决方案   * XML-RPCLibrary  举例    import xmlrpclib root = 'http:// ...

  9. [转]IE8兼容Object.keys

    转自:http://blog.sina.com.cn/s/blog_6d63cf160102vbsg.html 只需要加入 var DONT_ENUM = "propertyIsEnumer ...

  10. hdu1754 I Hate It

    题目链接:hdu1754 I Hate It 树状数组学习参考博客:http://blog.csdn.net/u010598215/article/details/48206959 树状数组之前没看懂 ...