JavaScript中的面向对象的继承

费利佩·瓦格纳

我正在研究在JavaScript中应用面向对象的方法。
我找到了一个使用继承的解决方案,我想知道是否有更好的方法以及如何包装我的类。

到目前为止,这就是我所做的。

People = function (name) {
    this.name = name
    this.age = null;
};

Employee = function (name) {
    People.call(this, name);
    this.IdentificationCode = null;
    this.salary = null;
}

Jonh = new Employee("Jonh Smith");
Jonh.age = 25;
Jonh.IdentificationCode = 35632;
Jonh.salary = 3500;
四人

注意:您不是从继承People,而是在重用People的构造函数。

建议1:

确保您没有创建全局变量。

var People = function (name) {     // var at the beginning is important
...
...
var Employee = function (name) {   // var at the beginning is important
...
...
var Jonh = new Employee("Jonh Smith");

建议2:

构造函数也应具有初始化其他变量的方法。

var People = function (name, age) {
    this.name = name || null;
    this.age  = age || null;
};
var Employee = function (name, age, idCode, salary) {
    People.call(this, name, age);
    this.IdentificationCode = idCode || null;
    this.salary = salary || null;
}

由于People其原型中没有任何方法,因此应该没问题。

但是,如果您People的原型中有方法,并且希望它们也可用于派生对象,则可以执行此操作

var People = function (name, age) {
    this.name = name || null;
    this.age  = age || null;
};

People.prototype.getData = function() {
    return [this.name, this.age];
};

现在定义Employee是这样

var Employee = function (name, age, idCode, salary) {
    People.call(this, name, age);
    this.IdentificationCode = idCode;
    this.salary = salary;
}

// Make the Employee's prototype an object of parent class's prototype
Employee.prototype = Object.create(People.prototype);

然后做,

var Jonh = new Employee("Jonh Smith", 25, 35632, 3500);
console.log(Jonh.getData());

现在,它会调用PeoplegetData,将打印

[ 'Jonh Smith', 25 ]

注意:这种类型的继承通常称为原型继承。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Haskell中的面向对象编程

来自分类Dev

节点js中的面向对象编程

来自分类Dev

Python中的面向对象示例

来自分类Dev

Codeigniter模型中的面向对象方法

来自分类Dev

混淆面向对象的Javascript

来自分类Dev

在面向对象的javascript中使用Onclick

来自分类Dev

面向对象的jQuery / JavaScript类继承

来自分类Dev

Javascript中的内存布局-面向数据与面向对象的设计

来自分类Dev

面向对象,javascript中的继承无法调用外部方法

来自分类Dev

在面向对象环境中,什么是PACK?

来自分类Dev

C程序中的面向对象方法

来自分类Dev

面向对象的JavaScript中的私有函数

来自分类Dev

在面向对象理论中,派生类是否应该继承父对象的接口?

来自分类Dev

C#面向对象的继承理论

来自分类Dev

在面向对象环境中,什么是PACK?

来自分类Dev

android中的面向对象编程

来自分类Dev

Python中的面向对象示例

来自分类Dev

Codeigniter模型中的面向对象方法

来自分类Dev

JavaScript中的面向对象的继承

来自分类Dev

面向对象的jQuery / JavaScript类继承

来自分类Dev

JavaScript中的结构和面向对象

来自分类Dev

面向对象的javascript

来自分类Dev

面向对象的JavaScript转换器

来自分类Dev

面向对象,javascript中的继承无法调用外部方法

来自分类Dev

Javascript中的面向对象的关键字

来自分类Dev

C程序中的面向对象方法

来自分类Dev

面向对象,继承,抽象

来自分类Dev

“面向对象”在面向对象或面向连接中是什么意思?

来自分类Dev

它不会在控制台内的面向对象的 JavaScript 中显示“this”对象