Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于现有类创建新的JavaScript类并对其进行扩展_Javascript_Constructor_Javascript Objects - Fatal编程技术网

如何基于现有类创建新的JavaScript类并对其进行扩展

如何基于现有类创建新的JavaScript类并对其进行扩展,javascript,constructor,javascript-objects,Javascript,Constructor,Javascript Objects,我正在学习JavaScript,对于如何在现有类的基础上创建新的JavaScript类并对其进行扩展,我有点困惑 我有一个Person类,我从中创建了两个实例(John和Suzie)。现在,我想在Person的基础上创建另一个类(Employee),该类没有更多属性,比如Employee Number(是否有可能回到John,以便他继承Employee类) 这就是我得到的: var Person = function (name, age){ this.name = name || "U

我正在学习JavaScript,对于如何在现有类的基础上创建新的JavaScript类并对其进行扩展,我有点困惑

我有一个Person类,我从中创建了两个实例(John和Suzie)。现在,我想在Person的基础上创建另一个类(Employee),该类没有更多属性,比如Employee Number(是否有可能回到John,以便他继承Employee类)

这就是我得到的:

var Person = function (name, age){
    this.name = name || "UNKNOWN";
    this.age= age || "UNKNOWN";
}
Person.prototype.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am " + this.age + " years old");
};
var john = new Person("John Smith",72);
var Suzie = new Person("Suzie Brown", 25);

将原型分配给父构造函数的实例,并确保在子构造函数中调用父构造函数:

var Person = function (name, age){
    this.name = name || "UNKNOWN";
    this.age= age || "UNKNOWN";
}

Person.prototype.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am " + this.age + " years old");
};

var Employee = function(name, age, id) {
    Person.call(this, name, age);

    this.id = id || 'UNKNOWN';
};

Employee.prototype = new Person();

Employee.prototype.getHired = function() {
    console.log('ZOMG I GOT HIRED! My ID # is:', this.id);
};
使用它的一些示例:

var bob = new Person('Bobby', 25);
console.log(bob.name); //Bobby
console.log(bob.age); //25
console.log(bob.id); //undefined
bob.sayHello(); //Hello, my name is Bobby and I am 25 years old

var suse = new Employee('Susan', 32, 1337);
console.log(suse.name); //Susan
console.log(suse.age); //32
console.log(suse.id); //1337
suse.sayHello(); //Hello, my name is Susan and I am 32 years old
suse.getHired(); //ZOMG I GOT HIRED! My ID # is: 1337

您没有显示任何与Employee类相关的代码。您在尝试什么?您遇到了什么问题?Employee类将与Person类相同,但EmployeeNumber是一个附加属性。我只是在试验。如果有许多实例变量是亲自创建的,并且它们是可变的,那么调用
Person.apply(这是参数)就很方便了在员工体内:不应该亲自检查姓名和年龄吗?并通过调用
Person.apply(this,arguments)
使继承自它的对象从中获益,或者如果您想具体说明参数:
Person.call(this,name,age)Employee.prototype.constructor没有指向Employee,因此不需要为继承创建Person实例。这类问题已经被问了很多,这就是为什么我试图制定一个涵盖继承、重写和调用super的答案
var Person = function (name, age){
    this.name = name || "UNKNOWN";
    this.age= age || "UNKNOWN";
}

Person.prototype.sayHello = function() {
    console.log("Hello, my name is " + this.name + " and I am " + this.age + " years old");
};

var Employee = function(name, age, id) {
    Person.call(this, name, age);

    this.id = id || 'UNKNOWN';
};

Employee.prototype = new Person();

Employee.prototype.getHired = function() {
    console.log('ZOMG I GOT HIRED! My ID # is:', this.id);
};
var bob = new Person('Bobby', 25);
console.log(bob.name); //Bobby
console.log(bob.age); //25
console.log(bob.id); //undefined
bob.sayHello(); //Hello, my name is Bobby and I am 25 years old

var suse = new Employee('Susan', 32, 1337);
console.log(suse.name); //Susan
console.log(suse.age); //32
console.log(suse.id); //1337
suse.sayHello(); //Hello, my name is Susan and I am 32 years old
suse.getHired(); //ZOMG I GOT HIRED! My ID # is: 1337