理解Ext.extend以及为什么在没有new的情况下调用超类作为函数

时间:2014-04-05 00:39:42

标签: javascript extjs

我很难理解Ext.extend函数的实现

它支持两种语法

Ext.extend(extendedClass, baseClass, overrides);

extendedClass = Ext.extend(baseClass, overrides);

因此它将参数标准化为

    var oc = Object.prototype.constructor;
    function(sb, sp, overrides){
        if(Ext.isObject(sp)){
            overrides = sp;
            sp = sb;
            sb = overrides.constructor != oc ? 
            overrides.constructor : 
            function(){sp.apply(this, arguments);};

我不明白的是sb如果没有传入就会被创建。

检查overrides是否为配置{}

>>> overrides = {a:1,b:2}
Object { a=1,b=2}
>>> overrides.constructor === Object.prototype.constructor
true

如果不是,则将extendedClass设置为overrides.constructor

否则,extendedClass为function(){sp.apply(this, arguments)

我阅读了使用或不使用new

调用构造函数之间的区别

http://js-bits.blogspot.com/2010/08/constructors-without-using-new.html

但是,在传递整个new以扩展到baseClass的同时,将{@ 1}}中的function() { ... }键盘作为函数调用baseClass意味着什么?

由于

整个功能看起来像这样

arguments

0 个答案:

没有答案