高级javascript继承失败 - parent< - parent< - child

时间:2015-09-18 03:05:26

标签: javascript inheritance prototype

我一直在读关于绑定,打电话,申请近一周的文章,这对我来说仍然很复杂。我认为我需要他们为我写的这个jsfiddle。但是,由于我仍然感到困惑,我无法做到。

我尽力写下我上周从遇到此问题的开发人员那里听到的内容。他希望从他制作的新类(classC)中显示classA的属性,但它没有显示数据。

所以就这样了。

有一个父对象(classA)包含完整的属性和方法。子类(类似于classB的子类)继承了classA中的属性,因此可以在classB'模态上呈现继承数据及其自己的数据。

现在,需要添加一个新的模态或部分来显示classA中的几个属性和classB中的属性。所以他们创建了一个名为classC的新类,它继承了classB中的所有信息。我记得他们说过,classC继承了classB中的所有属性和方法,但是它们在classA中所需的属性并不存在。

请帮助我摆弄小提琴。它将帮助我成为一个更好的Javascript开发人员。哦,我还记得他们提到过像“打电话”这样的事情。和超级'我还不熟悉。

function classA()  {
  this.firstname = 'Donna';
  this.lastname = 'Hill';
  function getFullname () {
    return firstname + ' ' + lastname;
  }
}

function classB() {
    var childofA = new classA();
    var age = 10;
    var sex = "female";

    var bObject = {
        showFullname : function() {
            console.log(this.childofA.getFullname);
        }
    }
    return bObject;
}

function classC() {
    var childofB = new classB();
    var cObject = {
        showFullname : function() {
            console.log(this.childofB.showFullname);
        }
    }
    return cObject;
}

var c = new classC();
console.log(c.showFullname());

http://jsfiddle.net/01hz8933/2/

1 个答案:

答案 0 :(得分:1)

小提琴更新。 http://jsfiddle.net/01hz8933/4/

// setup base class
function ClassA()  {
  this.firstname = 'Donna';
  this.lastname = 'Hill';
}
ClassA.prototype.showFullname = function() {
  return this.firstname + ' ' + this.lastname;
}


// first child class
function ClassB() {
  this.age = 10;
  this.sex = "female";
  ClassA.call(this); // call parent constructor
}
ClassB.prototype = Object.create(ClassA.prototype); // inherit
ClassB.prototype.constructor = ClassB; // use our constructor function


// grand child
function ClassC() {
  ClassB.call(this); // call parent constructor
}
ClassC.prototype = Object.create(ClassB.prototype); // inherit
ClassC.prototype.constructor = ClassC; // use our constructor function


var c = new ClassC();
console.log(c.showFullname());

在那里打开包装很多,但是你的原件中有很多东西让我感到惊讶。希望更新的小提琴为您提供一些答案。