Ext.extend 疑惑

[code="java"]
var Person = function (config) {
this.name = 'foo';
this.toString = function () {
return 'form Person';
}
}

var Student = function (config) {
Ext.apply(this, config);
Student.superclass.constructor.call(this, {
name: config.name
});
}

Ext.extend(Student, Person, {
toString: function () {
return 'form Student';
}
});

var s = new Student({
name: 'bar'
});

alert(s.name); // 为什么name没有被覆盖 如何才能此值
alert(s.toString()); // 为什么toString没有被覆盖 如何才能此方法

[/code]

我认为Ext.extend 应该可以做到 属性和方法的继承 和 属性和方法的 覆盖 请教之 谢谢!
[b]问题补充:[/b]
首先感谢 yourgame

我想你贴的这段代码自己有没有运行过
我运行你的代码 没有任何改变 下面贴出 直接在firebug运行 麻烦你了 谢谢

[code="java"]
var Person = function (config) {
this.name = 'foo';
this.toString = function () {
return 'form Person';
}
}

var Student = Ext.extend(Person, {
[color=red] constructor: function (config) {
Student.superclass.constructor.apply(this, arguments);
},
toString: function () {
return 'form Student';
}[/color]
});

var s = new Student({
name: 'bar'
});

alert(s.name);

alert(s.toString());

[/code]
[b]问题补充:[/b]
首先感谢 atian25

如能贴出完整可执行代码 不胜感激
[b]问题补充:[/b]
to atian25

我运行 代码可以

但是

我删除子类的toString() 然后运行 发现没有继承toString()
[b]问题补充:[/b]
感谢 atian25 抽出时间关注问题 并解决我的问题

我之前没有注意到 constructor 谢谢提醒

[code="java"]
var Person = Ext.extend(Object,
{
constructor:function(config){
Ext.apply(this,config,{name:'parent'});
},
//这是系统本身的方法
toString:function() {

return 'parent tostring';

},
someMethod:function(){
return 'someMethod';
}
})

var Student = Ext.extend(Person, {
constructor: function(config) {
Student.superclass.constructor.apply(this, arguments);
},
toString: function(){

return 'son to string';

}
});

var s = new Student({

name: 'son'

});

var Student2 = Ext.extend(Person, {
constructor: function(config) {
Student.superclass.constructor.apply(this, arguments);
}
});
var s2 = new Student2({

name: 'son2'

});

alert(s.name);

alert(s.toString());
alert(s.someMethod());
//这句..在FF下正常, IE下不对..
alert(s2.toString());
[/code]

[code="js"]Student = Ext.extend(Person, {
constructor: function(config) {
// Your preprocessing here

    MyGridPanel.superclass.constructor.apply(this, arguments);
    // Your postprocessing here

},

toString: function() {
    // etc.

}

});[/code]

执行顺序的问题.

Student.superclass.constructor.call(this, {

name: config.name

});

里面又执行了

this.name = 'foo';

this.toString = function () {

return 'form Person';

}

试下:

[code="java"]
var Person = function (config) {
Ext.applyIf(this,config,{
name:'parent',
toString:function () {

return 'parent tostring';

}

})
}

var Student = function (config) {

Ext.apply(this, config);

Student.superclass.constructor.call(this, {

name: config.name

});

}

Ext.extend(Student,Person, {
toString: function () {

return 'son tostring';

}

});

var s = new Student({

name: 'son'

});

alert(s.name); // 为什么name没有被覆盖 如何才能此值

alert(s.toString()); // 为什么toString没有被覆盖 如何才能此方法
[/code]

不过这种写法看起来不好,
还是如文档中的:
[code="java"]
MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
constructor: function(config) {
// Your preprocessing here

    MyGridPanel.superclass.constructor.apply(this, arguments);
    // Your postprocessing here

},

yourMethod: function() {
    // etc.

}

});
[/code]