function ClassA(sColor )
{
this.color = sColor;
this.sayColor = function()
{
alert(this.color);
}
}function ClassB(sColor, sName)
{
this.newMethod = ClassA;
this.newMethod(sColor);
delete this.newMethod; //这句会在什么时间执行?
this.sayName = function()
{
alert(this.sName);
}
}var objA = new ClassA('red');
var objB = new ClassB('blue','Nicholas');
objA.sayColor();
objB.sayColor(); //此程序的执行流程是什么 ?
{
this.color = sColor;
this.sayColor = function()
{
alert(this.color);
}
}function ClassB(sColor, sName)
{
this.newMethod = ClassA;
this.newMethod(sColor);
delete this.newMethod; //这句会在什么时间执行?
this.sayName = function()
{
alert(this.sName);
}
}var objA = new ClassA('red');
var objB = new ClassB('blue','Nicholas');
objA.sayColor();
objB.sayColor(); //此程序的执行流程是什么 ?
{
this.color = sColor;
this.sayColor = function()
{
alert(this.color);
}
}//让ClassB继承ClassA(使用了构造继承法)
function ClassB(sColor, sName) //该方法为ClassB的构造函数,所以在使用new关键字进行实例化时,下面的代码全部执行
{
this.newMethod = ClassA;
this.newMethod(sColor);
delete this.newMethod; //记得要删除,否则在子类添加与父类相同名称的方法时,会修改到父类。
this.sayName = function()
{
alert(this.sName);
}
}/*至于该程序的执行流程,当然按照下面一步一步的执行*/
var objA = new ClassA('red'); //这里JS引擎会调用ClassA的构造方法
var objB = new ClassB('blue','Nicholas'); //这里JS引擎会调用ClassB的构造方法objA.sayColor(); //objA执行自己的sayColor方法
objB.sayColor(); //objB执行父类的sayColor方法
function ClassA(sColor )
{
this.color = sColor;
this.sayColor = function()
{
alert(this.color);
}
}function ClassB(sColor, sName)
{
this.newMethod = ClassA; //指向对象A的构造函数
this.newMethod(sColor); //执行
delete this.newMethod; //不需要newMethod,就del
this.sayName = function()
{
alert(this.sName);
}
}var objA = new ClassA('red'); //创建A的实例
var objB = new ClassB('blue','Nicholas');//执行B的构造函数,这里就是条用Function ClassB, delete this.newMethod;也在这个时候执行了。
objA.sayColor();
objB.sayColor(); //B是继承了A了,执行A的sayColor函数,但是里面的this是指向classB的
function ClassA(sColor )
{
this.color = sColor;
this.sayColor = function()
{
alert(this.color);
}
}function ClassB(sColor, sName)
{
this.newMethod = ClassA;
this.newMethod(sColor);
delete this.newMethod; //实例化一个ClassB的时候会运行
this.sayName = function()
{
alert(this.sName);
}
}
//以上两个类内部方法都是在实例化时运行, 解析时只解析构造方法, 并不执行var objA = new ClassA('red'); //建立一个ClassA类: {color: 'red', sayColor:function(){xxx}}
var objB = new ClassB('blue','Nicholas');//同理建立一个ClassB类它没有newMethod, 因为第三句删了, 但是因为第一句, 它继承了ClassA, 所以它有color和sayColor: {color:'red', sayColor: function(){xxx}, sayName: function(){xxx}}; 如果不delete, 那么还会有个newMethod: ClassA('red')
objA.sayColor();
objB.sayColor();
//以上两句都能调用不知解释清楚没