Javascript 何时在Ext JS 4中放置self和self?

Javascript 何时在Ext JS 4中放置self和self?,javascript,extjs,extjs4,Javascript,Extjs,Extjs4,举个例子: 在本例中,self指的是什么? 在本文档中,我如何知道何时使用this以及何时使用self以及何时使用this.self? 这不起作用的原因: this.getName() 或 我的想法是self引用对象的类,所以我需要这样做的唯一原因是因为getName()方法是静态的,所以我(有点)不是从对象调用它,而是从类调用它。我说得对吗?是吗?哈哈是吗D此.self引用类对象。这意味着this.self==My.cool.Class。因此,您可以通过调用newthis.self()来实

举个例子:

在本例中,
self
指的是什么? 在本文档中,我如何知道何时使用
this
以及何时使用
self
以及何时使用
this.self
? 这不起作用的原因:

this.getName()


我的想法是self引用对象的类,所以我需要这样做的唯一原因是因为getName()方法是静态的,所以我(有点)不是从对象调用它,而是从类调用它。我说得对吗?是吗?哈哈是吗D

此.self
引用类对象。这意味着
this.self==My.cool.Class
。因此,您可以通过调用
newthis.self()
来实例化新的
My.cool.Class
对象

this.getName()
不起作用的原因是,在JS中,静态属性/方法在实例中不可用

例如:

var Class = function(){};
Class.prototype = {};

Class.staticMethod = function(){ alert('static method'); };
Class.prototype.instanceMethod = function(){ alert('instance method'); };

var instance = new Class();

Class.staticMethod(); // works
Class.instanceMethod(); // doesn't work

instance.staticMethod(); // doesn't work
instance.instanceMethod(); // works
Ext.define('One', {
    instanceMethod: function() { alert('Instance One'); }
});
Ext.apply(One, {
    staticMethod: function() { alert('Static One'); }
});


Ext.define('Two', {
    extend: 'One'
});


One.staticMethod(); // works
Two.staticMethod(); // doesn't work
此外,即使在静态上下文中,静态属性/方法在子类中也不可用

例如:

var Class = function(){};
Class.prototype = {};

Class.staticMethod = function(){ alert('static method'); };
Class.prototype.instanceMethod = function(){ alert('instance method'); };

var instance = new Class();

Class.staticMethod(); // works
Class.instanceMethod(); // doesn't work

instance.staticMethod(); // doesn't work
instance.instanceMethod(); // works
Ext.define('One', {
    instanceMethod: function() { alert('Instance One'); }
});
Ext.apply(One, {
    staticMethod: function() { alert('Static One'); }
});


Ext.define('Two', {
    extend: 'One'
});


One.staticMethod(); // works
Two.staticMethod(); // doesn't work
My.cool.Class
中可以使用
getName
方法的原因是
ExtClass.create
方法中复制了
Ext.Base
类(该类是私有的,在API中不可见)。

this.self不适用于递归静态方法,要递归调用静态方法,您只需使用它(即this.myCurrentRecursiveMethod(params))

我完全理解它。非常感谢D我会将此标记为“正确”答案。:)+1超级!我考虑过回答,但新来的人可以解释得很清楚:)