共计 2764 个字符,预计需要花费 7 分钟才能阅读完成。
(二)、JavaScript 原型对象
为感激大家的反对,特发福利红包(支 F 宝口令红包),点击返回支付:Gitee
原型对象
JavaScript 的原型机制是一种十分弱小和灵便的面向对象编程概念,它应用一个对象作为另一个对象的模板,从而实现继承。在 JavaScript 中,每个对象都有一个原型对象,它定义了该对象的属性和办法,并且充当着该对象的模板。
原型对象的定义
在 JavaScript 中,咱们能够通过应用构造函数来创立一个对象,构造函数中的 this 指向的是以后对象自身。同时,JavaScript 也提供了一种非凡的构造函数,称之为 Object 构造函数,它用来创立一个新的空对象。
当咱们应用 Object 构造函数创立一个新的对象时,JavaScript 会主动为该对象创立一个原型对象,该原型对象会蕴含一些根本的属性和办法,例如 toString()、valueOf() 等。
除了应用 Object 构造函数创建对象之外,咱们还能够通过应用原型对象来定义对象的属性和办法。JavaScript 中,每个对象都有一个 proto 属性,它指向该对象的原型对象。通过批改原型对象的属性和办法,咱们能够影响到所有继承自该原型对象的对象。
例如,咱们能够通过如下形式定义一个构造函数和它的原型对象:
// 定义一个构造函数
function Person(name, age) {
this.name = name;
this.age = age;
}
// 定义 Person 的原型对象
Person.prototype.sayHello = function() {console.log('Hello, my name is' + this.name + ', and I am' + this.age + 'years old.');
};
在下面的例子中,咱们定义了一个构造函数 Person,它蕴含两个属性 name 和 age。同时,咱们还定义了一个 sayHello 办法,并将它增加到了 Person 的原型对象中。
原型对象的原理
当咱们应用 new 关键字调用构造函数创立一个新的对象时,JavaScript 会主动为该对象创立一个 proto 属性,并将该属性指向构造函数的原型对象。
例如,当咱们应用如下代码创立一个 Person 对象时:
var person = new Person('John', 30);
JavaScript 会先创立一个新的空对象,而后将该对象的 proto 属性指向 Person 构造函数的原型对象。接着,JavaScript 会调用 Person 构造函数,并将 this 指向该新创建的对象,最初将 name 和 age 属性增加到该对象中。
当咱们调用 person 对象的 sayHello 办法时,JavaScript 首先会查找该对象自身是否具备该办法,因为 person 对象自身并没有该办法,因而 JavaScript 会查找 person 对象的 proto 属性指向的原型对象中是否具备该办法,如果有,就会调用该办法。如果原型对象中也没有该办法,JavaScript 会持续查找原型对象的 proto 属性指向的父原型对象,直到找到该办法为止,或者查找到原型链的末端仍未找到该办法,此时 JavaScript 会抛出一个 TypeError 异样。
在 JavaScript 中,每个对象都有一个原型链,它由一些原型对象形成,这些原型对象通过它们的 proto 属性连贯在一起。当咱们拜访一个对象的属性或办法时,JavaScript 会依照如下的程序查找该属性或办法:
首先查找该对象自身是否具备该属性或办法;
如果对象自身没有该属性或办法,则查找该对象的原型对象是否具备该属性或办法;
如果原型对象也没有该属性或办法,则查找原型对象的原型对象是否具备该属性或办法;
顺次类推,直到找到该属性或办法为止,或者查找到原型链的末端仍未找到该属性或办法,此时 JavaScript 会抛出一个 TypeError 异样。
通过原型链,JavaScript 实现了对象的继承机制,这种继承机制既简略又灵便。当咱们批改一个原型对象的属性或办法时,所有继承自该原型对象的对象都会受到影响,从而实现了代码的复用。
例如,咱们能够通过如下形式定义一个新的构造函数 Student,并继承自 Person:
// 定义一个新的构造函数 Student
function Student(name, age, major) {
// 调用父类构造函数,并传入参数
Person.call(this, name, age);
this.major = major;
}
// 设置 Student 的原型对象为 Person 的实例,从而继承 Person 的属性和办法
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
// 定义 Student 的新办法
Student.prototype.study = function() {console.log('I am studying' + this.major);
};
在下面的例子中,咱们首先应用 call 办法调用了父类 Person 的构造函数,并传入了相应的参数。而后,咱们将 Student 的原型对象设置为 Person 的实例,并批改该原型对象的 constructor 属性,以便它指向 Student 构造函数。
通过如上的形式,咱们实现了一个新的构造函数 Student,并继承自 Person。同时,咱们还为 Student 增加了一个 study 办法,以便它具备本人的行为。
总结
JavaScript 的原型机制是一种十分弱小和灵便的面向对象编程概念,它通过一个对象作为另一个对象的模板,实现了继承。每个对象都有一个原型对象,它定义了该对象的属性和办法,并充当着该对象的模板。
JavaScript 中,每个对象都有一个 proto 属性,它指向该对象的原型对象。通过批改原型对象的属性和办法,咱们能够影响到所有继承自该原型对象的对象。
JavaScript 的原型机制通过原型链实现了对象的继承机制,这种继承机制既简略又灵便,能够在不批改已有对象的根底上,对它们进行扩大和批改,从而实现了代码的复用。
在开发 JavaScript 应用程序时,咱们能够应用原型机制来实现对象之间的继承和组合,从而使代码更加简洁、易于保护和扩大。
在应用原型机制时,咱们须要留神以下几点:
对象的原型对象能够是另一个对象或 null。
当咱们拜访对象的属性或办法时,JavaScript 会依照原型链的程序查找该属性或办法。
对象的原型对象能够通过 proto 属性拜访和批改。
咱们能够通过批改原型对象的属性和办法,影响到所有继承自该原型对象的对象。
为不便宽广前端技术爱好者,整合了前端技术相干常识和资源,且有很多福利能够支付:Gitee
如有转载需要,请分割:Gitee
本文由 mdnice 多平台公布