JavaScript通过原型链实现面向对象编程,每个对象都有指向其原型的内部链接,属性查找会沿原型链向上追溯直至null;函数的prototype属性用于构建实例的原型链,__proto__(或Object.getPrototypeOf)反映对象的原型连接,constructor默认指向构造函数,继承通过将子类原型设为父类实例实现,核心是原型链的拼接与查找机制。

JavaScript 的面向对象特性与其他语言不同,它基于原型(Prototype)而非类来实现继承和对象创建。理解原型链是掌握 JavaScript 面向对象编程的关键。
原型与 prototype 属性
在 JavaScript 中,每个函数都有一个 prototype 属性,这个属性指向一个对象,即该函数的原型对象。当我们使用构造函数创建实例时,实例会自动连接到构造函数的原型对象。
例如:
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
console.log(“Hello, I’m ” + this.name);
};
const p1 = new Person(“Alice”);
p1.greet(); // 输出: Hello, I’m Alice
这里,p1 虽然没有定义 greet 方法,但它能访问这个方法,因为它通过原型链找到了 Person.prototype 上的方法。
立即学习“Java免费学习笔记(深入)”;
__proto__ 与原型链查找机制
每个 JavaScript 对象都有一个内部属性 [[Prototype]],可通过 __proto__ 访问(现代开发中推荐使用 Object.getPrototypeOf())。这个属性指向该对象的原型。
当访问一个对象的属性或方法时,JavaScript 引擎会:
先在对象自身查找 如果没找到,就沿着 __proto__ 指向的原型对象继续查找 一直向上追溯,直到原型链末端(null)为止
比如上面的例子中:
p1.__proto__ === Person.prototype // true
Person.prototype.__proto__ === Object.prototype // true
Object.prototype.__proto__ === null // true
这就构成了完整的原型链:p1 → Person.prototype → Object.prototype → null
constructor 属性的作用
原型对象默认有一个 constructor 属性,指向对应的构造函数。
Person.prototype.constructor === Person // true
p1.constructor === Person // true
这个属性可用于判断对象是由哪个构造函数创建的,但要注意:如果重写了整个 prototype,需要手动修复 constructor 指向,否则会导致判断出错。
实现继承的本质:原型链拼接
JavaScript 中的“继承”实际上是通过调整原型链实现的。常见的做法是将子类型的原型设置为父类型的一个实例。
function Animal(name) {
this.name = name;
}
Animal.prototype.eat = function() {
console.log(this.name + ” is eating.”);
};
function Dog(name, breed) {
Animal.call(this, name);
this.breed = breed;
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
const dog = new Dog(“Max”, “Golden Retriever”);
dog.eat(); // Max is eating.
这里用 Object.create() 创建了一个以 Animal.prototype 为原型的新对象,从而让 Dog 实例可以通过原型链访问 Animal 的方法。
基本上就这些。原型链看似复杂,核心就是对象之间的链接关系和属性查找规则。掌握了这一点,JavaScript 的面向对象编程就清晰多了。不复杂但容易忽略。
以上就是JavaScript原型链剖析_JavaScript面向对象编程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1540412.html
微信扫一扫
支付宝扫一扫