function ClassA(sColor) {
this.color = sColor;
}ClassA.prototype.sayColor = function () {
alert(this.color);
};function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
}ClassB.prototype = new ClassA();ClassB.prototype.sayName = function () {
alert(this.name);
};上面这段代码中 这句
ClassB.prototype = new ClassA();
为什么不会覆盖ClassB的name属性?
this.color = sColor;
}ClassA.prototype.sayColor = function () {
alert(this.color);
};function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
}ClassB.prototype = new ClassA();ClassB.prototype.sayName = function () {
alert(this.name);
};上面这段代码中 这句
ClassB.prototype = new ClassA();
为什么不会覆盖ClassB的name属性?
解决方案 »
- Microsoft JScript 运行时错误 错误 '800a1391'
- 如何用一个超链接发送两个参数到两个不同页面?
- 如何抓获所有向外发的请求.比如捕获所有点击事件以及表单提交事件,但是脚本提交的那部分如何再用脚本捕捉到呢?
- 一个层的问题
- event.srcElement.submit在ie6下可以正常运行,但是在ie5下不行,大家看看为什么?
- 为什么显示不出图片?
- 在线等候,请问如何用javascript打一个文件,比如.wav格式的??
- 在Exception没有被catch的情况下,如何避免IE处理脚本错误?
- 快捷键提交表单。
- cookie问题,跨域
- 请问如何点击后为控件赋值
- 如何编辑节点属性?(javascript)
alert(this.name);
};ClassB.prototype = new ClassA();
这样颠倒下顺序!
这句是通过原型链实现了继承,即ClassB拥有了ClassA的属性和方法,同时ClassB拥有的与ClassA同名的属性和方法就重写了父类ClassA的属性和方法,所以ClassB的name是它自己的属性,当然不会被覆盖了!!ClassB得到了ClassA的color属性和sayColor方法,但是ClassA是什么也得不到的,这里说的得到就是继承的意思!!
this.color = sColor;
} ClassA.prototype.sayColor = function () {
alert(this.color);
}; function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
} ClassB.prototype = new ClassA(); ClassB.prototype.sayName = function () {
alert(this.name);
};
var a=new ClassA("red");
a.sayColor();//red
var b=new ClassB("green","feng");b.sayColor();//green
b.sayName()//feng
------以下把sayname和name都被覆盖了
function ClassA(sColor) {
this.color = sColor;
} ClassA.prototype.sayColor = function () {
alert(this.color);
}; function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
} ClassB.prototype = new ClassA(); ClassB.prototype.sayName = function () {
alert(this.name);
};
ClassB.prototype = new ClassA();
var a=new ClassA("red");
a.sayColor();//red
var b=new ClassB("green","feng");b.sayColor();//green
b.sayName()//什么也没有
function ClassA(sColor) {
this.color = sColor;
} ClassA.prototype.sayColor = function () {
alert(this.color);
}; function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
} ClassB.prototype = new ClassA(); ClassB.prototype.sayName = function () {
alert(this.name);
};
//ClassB.prototype = new ClassA(); 把上楼把这句去掉
var a=new ClassA("red");
a.sayColor();//red
var b=new ClassB("green","feng"); b.sayColor();//green
b.sayName()//什么也没有
this.name = name;与ClassA.prototype被重新复制 到底哪个是后执行的var a = new ClassA()的时候
实际上执行顺序是这样的
a=ClassA.prototype;
ClassA.call(a);所以疑惑解答了如果没有new关键字 ClassA的prototype中的元素不会extract到a中
function ClassA(sColor) {
this.color = sColor;
} ClassA.prototype.sayColor = function () {
alert(this.color);
}; function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
} ClassB.prototype.sayName = function () {
alert(this.name);
}; var a=new ClassA("red");
a.sayColor();//red
var b=new ClassB("green","feng");
ClassB.prototype = new ClassA();
b.sayColor();//green ?
b.sayName()//feng ?
this.color = sColor;
} ClassA.prototype.sayColor = function () {
alert(this.color);
}; function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
} ClassB.prototype.sayName = function () {
alert(this.name); //函数都有一个原型对象,默认为空,有属性constructor;这里是增加这个
}; //对象的 sayName属性
ClassB.prototype = new ClassA(); //把函数的原型对象修改为其它对象,上步的设置属性失效
var a=new ClassA("red");
a.sayColor();//red
var b=new ClassB("green","feng");
b.sayColor();//green 来自新的原型对象的的属性b.sayName()//什么也没有