永发信息网

JavaScript面向对象流氓式的继承问题

答案:1  悬赏:20  手机版
解决时间 2021-07-31 18:10
  • 提问者网友:轻浮
  • 2021-07-30 20:48

function Polygon(iSides) {
this.sides = iSides;

if (typeof Polygon._initialized == "undefined") {

Polygon.prototype.getArea = function () {
return 0;
};

Polygon._initialized = true;
}
}

function Triangle(iBase, iHeight) {
Polygon.call(this, 3); //流氓式的继承就在这里,“无缘无故”的强制执行了
this.base = iBase;
this.height = iHeight;

if (typeof Triangle._initialized == "undefined") {

Triangle.prototype.getArea = function () {
return 0.5 * this.base * this.height;
};

Triangle._initialized = true;
}
}

Triangle.prototype = new Polygon(); 关键之处就是在这里实现了继承父类的属性。

var triangle = new Triangle(12, 4);

alert(triangle.sides); //调用sides属性无话可说,此时该对象就有一个sides属性
alert(triangle.getArea());

调用getArea()的时候我就要提问了,理论上此时的triangle应该有两个getArea(),一个是父类的,一个是本身的,直接调用肯定是调用本身的getArea(),但是如果我要显示的调用父类的getArea(),JavaScript有没有实现这样的功能呢?

最佳答案
  • 五星知识达人网友:你可爱的野爹
  • 2021-07-30 21:53
如果你不怕麻烦, 我们甚至还可以通过级连的方式, 取出其构造函数中定义的原始属性值. ..

alert(myPicture.__proto__.__proto__.borderWidth); 根据专家观察,这样的理论和现象都是值得各位站长深思的,所以希望大家多做研究学习,争取总结出更多更好的经验!

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯