JavaScript 理解原型链
当你开始学习编程时,你可能会遇到一个术语 面向对象编程 。在这里,我们将了解它的含义,并承认它是将数据分组为具有属性的“对象”。在许多编程语言中创建这些对象的关键字是类。你可以使用构造函数和许多其他公共和私有函数来定义一个类。如果你想让一个类继承另一个类,你可以编写简单的继承语法。你已经创建了一系列的继承。直到ES2015,该语言没有实现类。相反,它们使用了原型链。新的ES6“class”隐藏了原型链的内部工作原理。如果你想使用JavaScript的面向对象编程范式来开发高性能代码,了解原型链的工作原理至关重要。对于那些熟悉(或不太熟悉)计算机的人来说,原型链可能是一个链表。这是一个严重简化的说法。
我们如何初始化我们的链? JavaScript中的所有对象都有一个原型。一个对象的原型也被认为是一个对象。
function Dog(name) {
this.name = name;
}
因为原型是一个对象,所以原型有自己的原型。在这种情况下,Dog.prototype的原型是Object.prototype
<script type="text/javascript" charset="utf-8">
function Dog(name) {
this.name = name;
}
console.log(
Object.prototype.isPrototypeOf(Dog.prototype)); // yields true
</script>
输出:
true
回想一下 hasOwnProperty() 方法。
<script type="text/javascript" charset="utf-8">
function Dog(name) {
this.name = name;
}
let duck = new Dog("Donald");
console.log(duck.hasOwnProperty("name")); // yields true
</script>
输出:
true
hasOwnProperty() 方法在Object.prototype中定义,可以通过Dog.prototype访问,变量”duck”也可以访问它。它清楚地解释了原型链。在这个原型链中,”Dog”是”duck”的超类型,而”duck”是子类型。对象是”Dog”和”duck”的超类型。我们将Object作为JavaScript中所有对象的超类型。任何对象都可以使用hasOwnProperty() JavaScript方法。