[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]
执行顺序的问题.
里面又执行了
试下:
[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]