原型的出现,就是为了解决 **构造函数的缺点**
原型就是一个对象-存储所有构造函数创建出来的一类对象的共有方法
每一个构造函数都有一个原型属性(原型对象)构造函数,prottype.存储所有构造函 数创建出来的一类对象的共有方法
每一个对象都一个_proto_ 属性,也是原型,这个属性指向创建自己的构造函数的原型 prototype,
当我们使用一个对象的属性和方法的时候,先会在自身找,自身没有就会去原型中找
prototype
原型中的prototype是一个对象,它是每个JavaScript对象都有的一个属性。它是一个指向该对象的原型对象的指针。原型对象是一个包含共享属性和方法的对象,它可以被该对象的所有实例共享。
当我们创建一个对象时,JavaScript会自动为该对象创建一个原型对象,并将该对象的prototype属性指向该原型对象。如果我们在原型对象上添加属性和方法,那么该对象的所有实例都可以访问这些属性和方法。
例如,我们可以创建一个Person对象,并在其原型对象上添加一个sayHello方法:
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log("Hello, my name is " + this.name);
}
var person1 = new Person("John");
var person2 = new Person("Jane");
person1.sayHello(); // 输出 "Hello, my name is John"
person2.sayHello(); // 输出 "Hello, my name is Jane"
在上面的例子中,我们在Person对象的原型对象上添加了一个sayHello方法。当我们创建person1和person2实例时,它们都可以访问该方法。这是因为它们的prototype属性都指向了Person对象的原型对象。
_proto_
在 JavaScript 中,每个对象都有一个特殊的属性 `_proto_`,它指向该对象的原型。原型是一个对象,它包含了该对象的属性和方法。当我们访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript 就会沿着该对象的原型链向上查找,直到找到该属性或方法为止。
例如,如果我们有一个对象 `person`,它的原型是 `Object.prototype`,那么当我们访问 `person.toString()` 时,JavaScript 会先在 `person` 对象中查找 `toString` 方法,如果找不到,就会沿着原型链向上查找,直到在 `Object.prototype` 中找到该方法为止。
在 JavaScript 中,原型链是实现继承的基础。我们可以通过修改对象的原型来实现继承和多态等特性。
原型链
原型链是 JavaScript 中的一个重要概念,它是实现继承的一种机制。每个对象都有一个原型对象,原型对象又有自己的原型对象,形成一个链式结构,这就是原型链。
当访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 引擎会沿着原型链向上查找,直到找到该属性或方法为止。如果一直查找到最顶层的 Object.prototype 对象仍然没有找到,则返回 undefined。
通过原型链,可以实现对象之间的继承。子对象可以通过原型链访问父对象的属性和方法,从而实现代码的复用和扩展。在 JavaScript 中,原型链是实现面向对象编程的基础。
总结
1,构造函数是使用了new关键字的函数,用来创建对象,所有函数都是Function()的实例
2,原型对象是用来存放实例对象的公有属性和公有方法的一个公共对象,所有原型对象都是Object()的实例
3,原型链又叫隐式原型链,是由__proto__属性串联起来,原型链的尽头是Object.prototype
————————————————