Javascript Ext.define的原型替代品?

Javascript Ext.define的原型替代品?,javascript,extjs,extjs4.1,Javascript,Extjs,Extjs4.1,在使用各种JS IDE时,当使用Ext.define定义自定义对象时,所有这些IDE都会丢失。当通过原型(函数定义,然后是原型函数等)定义简单的js对象时,它们都可以很好地工作。是否有一种替代Ext.define的方法可以重用现有的定义,即修饰现有对象而不是定义它?我甚至不介意它不拾取基类的东西,我只关心我的定义——而且,我不需要动态加载,所以我不担心加载顺序等 作为记录,我看到有Ext.extend,但我不想探讨它,因为它已被弃用 示例如下: function Uploader() { }

在使用各种JS IDE时,当使用Ext.define定义自定义对象时,所有这些IDE都会丢失。当通过原型(函数定义,然后是原型函数等)定义简单的js对象时,它们都可以很好地工作。是否有一种替代Ext.define的方法可以重用现有的定义,即修饰现有对象而不是定义它?我甚至不介意它不拾取基类的东西,我只关心我的定义——而且,我不需要动态加载,所以我不担心加载顺序等

作为记录,我看到有Ext.extend,但我不想探讨它,因为它已被弃用

示例如下:

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的方法,即使修饰类有自己的同名方法