一、原型概念
- 在JavaScript中,原型是一个对象,每个对象都有它的原型对象。
- 原型(Prototype)是用于实现对象继承和属性共享的一种机制,这种机制允许对象共享彼此的属性和方法。
- 当我们试图访问一个对象的属性或方法时,如果这个属性或方法在对象本身不存在,JavaScript引擎会尝试在其原型对象上查找。
// 定义一个构造函数
function Person(name) {
this.name = name;
}
// 在原型对象上添加方法
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
// 创建一个实例对象
var person1 = new Person('Verycool');
// 调用原型对象上的方法
person1.sayHello(); // 输出:Hello, my name is Verycool
在上述例子中:
Person是一个构造函数。Person.prototype是构造函数的原型对象。person1是通过Person构造函数创建的实例对象。person1可以访问Person.prototype上的sayHello方法。
二、原型作用
原型对象是用来实现对象的继承和方法的共享的一种机制。在原型对象中定义的属性和方法,可以被所有继承自该原型的对象所共享。
三、获取原型的方法
方法
- 通过对象的__proto__获取
- 通过构造函数的prototype属性
- ES6:通过类的prototype
概念
-
Prototype(显式原型):每个函数都有一个prototype属性,指向自己的原型对象。使用这个对象的好处就是可以让所有实例对象共享它所拥有的属性和方法。 -
__proto__(隐式原型):每个实例对象都有一个__proto__属性,用于指向函数的原型对象。
构造函数.prototype == 实例化对象.proto
四、原型链
概念:当你访问一个对象的属性或方法时,JavaScript引擎会首先在这个对象自身的属性中查找。如果找不到,它会沿着原型链向上查找,直到找到这个属性或方法,直到到达原型链的顶端(即Object.prototype),从而形成了“原型链”。
查找规则:
-
自有属性:首先在对象自身查找属性或方法。
-
原型属性:如果在对象自身没有找到,就会在其原型对象中查找。
-
原型的原型:如果仍未找到,则继续沿着原型链向上查找,直到到达顶端的
Object.prototype。 -
终点:如果到达
Object.prototype仍未找到,则返回undefined。
五、构造函数和普通函数区别
-
调用:构造函数必须通过new来调用
-
命名:构造函数名字习惯首字母大写
-
返回值:构造函数没有返回值,普通函数可以指定返回值
-
this指向:构造函数this指向创建出的实例化对象,普通函数看情况不同