发布于 2026-01-06 0 阅读
0

原型继承 - Javascript 周刊

原型继承 - Javascript 周刊

本文将介绍 JavaScript 中的原型继承。原型继承 - JavaScript 周刊

JavaScript 中的 Curring - JavaScript 周刊

JavaScript 中的闭包 - JavaScript 周刊

理解 Javascript 中的生成器

在面向对象编程中,有一个称为继承的概念,其中子对象继承父对象的所有属性。

在像 JavaScript 这样的函数式编程中,我们使用与原型继承和原型链相同的概念。

什么是原型继承?

首先,面向对象继承和 JavaScript 原型继承之间存在主要区别。

与面向对象编程(OOP)中的对象不同,JavaScript 对象没有类型或类可以继承。但是,JavaScript 有一个叫做原型(prototype)的概念。这就是主要区别。

我们将通过一个现实世界的例子来了解原型继承的实现。

真实案例

设想

假设你正在构建一个应用程序,其中用户是根据角色进行授权的。

例如,管理员只能创建项目,项目经理可以访问项目。但是,所有用户都有一些共同点,例如登录信息等。

在这种情况下,我们可以使用原型继承和原型链。

首先,就像普通函数一样,我们创建一个名为User 的函数,它是一个构造函数(注意:在 JavaScript 中,构造函数实际上就是一个普通函数)。


function User(name,age) {
   this.name = name;
   this.age = age;
}

之后,在构造函数中创建一个名为login的方法。创建方法是使用原型

User.prototype.login = function() {
  console.log('logging in');
}

之后,创建一个名为adminproject manager的用户实例。

let admin = new User('admin',40);

let projectManager = new User('pm',35);

我们正在使用新关键字创建一个User实例

如果我们在管理员和项目管理器中调用登录函数,将会看到类似这样的内容:

原因是,管理员项目经理继承了用户的原型

为了验证这一点,请检查管理员项目经理是否具有登录属性。

console.log(admin.hasOwnProperty('login'));

它将返回 false,原因是登录信息是从父级继承的。

完整代码:

function User(name,age) {
   this.name = name;
   this.age = age;
}

User.prototype.login = function() {

  console.log('logging in');
}


let admin = new User('admin',40);

admin.createProject = function() {
  console.log('project is created');
}

console.log(admin.hasOwnProperty('login'));
admin.login();

admin.createProject();

let projectManager = new User('pm',35);

projectManager.login();

结论

也就是说,原型继承和原型链是 JavaScript 的强大功能之一。

本文到此结束,我们将在后续文章中学习更多 JavaScript 的核心概念。

在此之前,祝您编程愉快 :-)

文章来源:https://dev.to/ganeshmani/prototypal-inheritance-javascript-weekly-2gf9