原型继承 - Javascript 周刊
本文将介绍 JavaScript 中的原型继承。原型继承 - JavaScript 周刊
JavaScript 中的 Curring - 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');
}
之后,创建一个名为admin和project 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

