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超级!我考虑过回答,但新来的人可以解释得很清楚:)