Javascript Ext.define的原型替代品?
在使用各种JS IDE时,当使用Ext.define定义自定义对象时,所有这些IDE都会丢失。当通过原型(函数定义,然后是原型函数等)定义简单的js对象时,它们都可以很好地工作。是否有一种替代Ext.define的方法可以重用现有的定义,即修饰现有对象而不是定义它?我甚至不介意它不拾取基类的东西,我只关心我的定义——而且,我不需要动态加载,所以我不担心加载顺序等 作为记录,我看到有Ext.extend,但我不想探讨它,因为它已被弃用 示例如下:Javascript Ext.define的原型替代品?,javascript,extjs,extjs4.1,Javascript,Extjs,Extjs4.1,在使用各种JS IDE时,当使用Ext.define定义自定义对象时,所有这些IDE都会丢失。当通过原型(函数定义,然后是原型函数等)定义简单的js对象时,它们都可以很好地工作。是否有一种替代Ext.define的方法可以重用现有的定义,即修饰现有对象而不是定义它?我甚至不介意它不拾取基类的东西,我只关心我的定义——而且,我不需要动态加载,所以我不担心加载顺序等 作为记录,我看到有Ext.extend,但我不想探讨它,因为它已被弃用 示例如下: function Uploader() { }
function Uploader() {
}
Uploader.prototype.execute = function(url) {
//do stuff here.
}
Ext.???(Uploader, {
initComponent: function() {
// handle ext specific stuff
}
})
好的,在阅读了mixin之后,我有了一个有效的模式 继续使用define扩展ext对象(例如面板),并使用mixins数组添加原型对象。定义的类必须与原型具有不同的名称,否则Ext不会将其创建为定义 下面是演示该技术的代码块:
Ext.onReady(function(){
var Plain = function() {
}
Plain.prototype.message = "Hello prototype";
Plain.prototype.say = function() {
console.log(this.message);
}
Plain.prototype.hello = function() {
console.log("hello guy!");
}
var p = new Plain();
p.say();
Ext.define("PlainPanel", {
message: "Hello Ext",
extend: 'Ext.panel.Panel',
mixins: [Plain]
});
var p2 = new PlainPanel();
p2.say();
p2.hello();
console.log(p2);
});
下面是mixin的典型定义和使用方式
Ext.define('Plain', {
message: 'Hello prototype',
say: function () {
console.log(this.message);
},
hello: function () {
console.log('hello guy!');
}
});
Ext.define('PlainPanel', {
extend: 'Ext.panel.Panel',
mixins: {
plain: 'Plain'
},
message: 'Hello Ext'
});
Ext.onReady(function () {
var p2 = Ext.create('PlainPanel');
p2.say(); // Hello Ext
p2.hello(); // hello guy!
console.log(p2);
});
不要将mixin
定义为数组,而是将其定义为对象,使属性名成为该mixin的内部引用,而值是该mixin的类名。这允许您引用mixin的方法,即使修饰类有自己的同名方法