为什么Ext.id函数被覆盖?

时间:2011-01-06 10:07:10

标签: javascript extjs

我正在尝试包装一个HTMLElement来创建一个Ext.Element,但是这个神秘地用一些ID覆盖了Ext.id函数并使得ExtJs在那之后无法使用

我试图制作这个简单的例子来说明问题,虽然我不得不在原始应用中挖掘很多代码来找到这个微妙的错误,例如在线试用此代码http://jsfiddle.net/rdudW/1/或使用此

<html>
<head>
<script type="text/javascript" src="adapter/ext/ext-base.js"></script> 
<script type="text/javascript" src="ext-all.js"></script> 
<script>
Ext.onReady(function(){
    alert(Ext.id)
    var elem = Ext.Element(document.getElementsByTagName('table')[0])
    alert(Ext.id)
});
</script>
</head>
<body>
<table><table>
</body>
</html>

在调用Ext.Element警告显示函数定义之前,但在此之后调用id'lext-gen2'

注意:我知道我应该使用新的Ext.Element,但这不是问题,问题是为什么会出现这个简单的可能错误?

1 个答案:

答案 0 :(得分:4)

我已经浏览了源代码,并且有一些功能,如果在错误的范围内调用将覆盖Ext.id。遗漏new可能正是这样做的。在创建Ext Element的{​​{1}}对象实例的上下文中调用其中一个函数。

见:

Ext.Element = function(element, forceNew){
    var id;
    /* some code here */

    id = dom.id;

    /* some code here */

    /**
     * The DOM element ID
     * @type String
     */
    this.id = id || Ext.id(dom);
};

如果您使用new进行调用,则this会引用新创建的对象。如果您直接调用此方式,this会引用Ext