深入探究JavaScript原型链——原型、__proto__和构造函数(上)
2023-12-19 10:26:38
前言
函数对象是由function
创造出来的函数,比如:
function add(a, b) {
return a + b;
}
系统内置的函数对象只有函数对象才有prototype
属性,重要的事情说三遍!普通对象除开函数对象之外的对象都是普通对象。
原型对象prototype
属性
原型
原型是JavaScript中一个非常重要的概念,它决定了对象的行为和属性。每个对象都有一个原型,原型也是一个对象,原型对象也有原型,以此类推,直到原型链的顶端。
原型链是JavaScript中对象继承的基础。当一个对象访问一个不存在的属性或方法时,JavaScript会沿着原型链向上查找,直到找到该属性或方法。
原型可以为对象增加新的属性和方法,从而实现对象之间的继承。
例如,我们可以创建一个Person
对象,并为它添加一个name
属性和一个greet
方法:
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name}.`);
};
现在,我们可以创建一个Student
对象,并继承Person
对象的属性和方法:
function Student(name, major) {
Person.call(this, name);
this.major = major;
}
Student.prototype = Object.create(Person.prototype);
现在,Student
对象不仅具有自己的属性和方法,还继承了Person
对象的属性和方法。
proto
__proto__
属性是一个指向原型对象的指针。我们可以使用__proto__
属性来访问和修改原型对象。
例如,我们可以使用以下代码来访问Student
对象的原型对象:
const student = new Student("John Doe", "Computer Science");
console.log(student.__proto__ === Person.prototype); // true
构造函数
构造函数是用来创建对象的函数。构造函数的名称一般与对象名相同,并且第一个字母大写。
构造函数的作用是初始化对象并设置对象的属性和方法。
例如,我们可以使用以下代码来创建Student
对象:
const student = new Student("John Doe", "Computer Science");
在上面的代码中,Student
是构造函数,new
用于创建一个新的Student
对象,John Doe
和Computer Science
是传递给构造函数的参数。
总结
原型、__proto__和构造函数是JavaScript原型链中的三个重要概念。通过对这些概念的理解,您可以更好地掌握JavaScript中对象和类的行为,并编写出更加优雅和高效的代码。
在下一篇文章中,我们将继续深入探讨JavaScript原型链,并介绍一些高级的用法。