javascript prototype 原型链

JavaScript 中的每一个对象都有一个指向另一个对象的内部链接,这个链接称为原型(prototype)链。如果一个对象需要一个属性或者方法,但是它本身并没有这个属性或方法,它会沿着自身的原型链向上查找,直到找到该属性或方法为止。

原型链的概念

每一个 JavaScript 对象在创建时,都会与一个 "原型" 关联起来,这个原型可以是其他的对象的实例,这样,原型对象就会形成一个 "链" 的概念,在查找某个方法或属性时,如果在当前对象上找不到,就会沿着这个原型链一直向上查找,直到找到为止,这就是 "原型链" 的概念。

原型链的创建方式

每一个函数都有一个 prototype 属性,这个属性是一个对象,它的属性和方法会被构造函数的实例继承。如果这些实例都需要初始成员,但又不能使用构造函数中的 this,可以为其添加 prototype 属性。

function Person(name, age){
    this.name = name;
    this.age = age;
}
Person.prototype.getName = function() {
    return this.name;
}
Person.prototype.getAge = function() {
    return this.age;
}

原型链的示例

以下是使用原型链的一个示例,我们定义了一个 Person 构造函数,它有一个属性和两个方法。我们可以用 new 关键字创建一个实例,然后使用实例对象直接调用这些方法。

function Person(name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype.getName = function() {
    return this.name;
}
Person.prototype.getAge = function() {
    return this.age;
}
const person = new Person('张三', 20);
console.log(person.getName()); // 张三
console.log(person.getAge()); // 20

另一个示例是在一个类的基础上创建一个子类,在子类的构造函数中调用父类的构造函数,并继承父类的原型方法。

function Person(name) {
    this.name = name;
}
Person.prototype.getName = function() {
    return this.name;
}
function Student(name, id) {
    Person.call(this, name);
    this.id = id;
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.getId = function() {
    return this.id;
};
const student = new Student('李四', 's001');
console.log(student.getName()); // 李四,从 Person 原型中继承下来的方法
console.log(student.getId()); // s001,Student 原型中的方法

Student.prototype = Object.create(Person.prototype); 这一行中,我们使用 Object.create 方法创建一个拥有 Person.prototype 属性的新对象,并将这个对象赋值给 Student.prototype,这样,Student 便继承了 Person,并且获取了 Person.prototype 上的所有属性和方法,即实现了基于原型的继承。

以上就是原型链的一个详细攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript prototype 原型链 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 解析前端面试题2019年小米工程师面试题(附答案)

    这里给出详细讲解“解析前端面试题2019年小米工程师面试题(附答案)”的完整攻略。 前言 本文将对2019年小米工程师面试题进行分析和解答,其中涉及到的知识点基本全面,包括ES6、CSS、HTTP等内容。本文旨在帮助读者更深入理解前端知识,提高应对面试的能力。 攻略 下面按照题目出现顺序,逐个进行解答。 1. 给出题目vue的几种优化 该题目主要考察了对Vu…

    JavaScript 2023年5月19日
    00
  • 浅谈android nexus私服的使用

    浅谈 Android Nexus 私服的使用 引言 随着 Android 开发的不断深入,项目迭代的频率也越来越快。然而,每当你切换一个项目或者重构项目时,你需要重新从互联网下载和安装所有的依赖项,这是一件非常耗时的事情。尤其是在国内网络环境下,从 Maven 中央仓库下载依赖会非常慢而且不稳定。 为了解决这个问题,很多公司都建立了自己的 Nexus 私服来…

    JavaScript 2023年5月28日
    00
  • Javascript Array prototype 属性

    以下是关于JavaScript Array prototype属性的完整攻略。 JavaScript Array prototype属性 JavaScript Array prototype属性是所有数组对象的原型对象。该属性包含了所有数组对象可以访问的方法和属性。我们可以通过修改Array.prototype来扩展数组对象的功能。 下面是一个使用Array…

    JavaScript 2023年5月11日
    00
  • JS数组的常用10种方法详解

    JS数组的常用10种方法详解 在JavaScript编程中,数组是一种十分常见的数据结构。JS数组提供了丰富的API供我们操作和处理数组,今天我们来详细讲解一下JS数组的常用10种方法。 1. push() arr.push(item1, item2, …, itemX) push()方法在数组的末尾添加一个或多个元素,并返回数组的新长度。例如: let…

    JavaScript 2023年5月27日
    00
  • ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧

    使用AJAXRequest进行AJAX应用程序开发 AJAXRequest是一个轻量级的JavaScript库,旨在为基于AJAX的应用程序提供优雅而简单的开发方式。AJAXRequest 0.7是最新版本,适用于简单的AJAX请求和响应处理。 安装 你可以从GitHub下载AJAXRequest 0.7的源代码,也可以从CDN上使用以下代码: <sc…

    JavaScript 2023年6月11日
    00
  • 浅谈javascript语法和定时函数

    浅谈JavaScript语法和定时函数 JavaScript语法 JavaScript是一种基于对象的脚本语言,主要应用于Web前端和服务器端的开发。下面我们来简单介绍一下JavaScript的语法: 数据类型 JavaScript的数据类型包括:字符串、数字、布尔值、对象、数组、null和undefined。 示例代码: var str = ‘hello’…

    JavaScript 2023年5月27日
    00
  • JavaScript 保存数组到Cookie的代码

    JavaScript 保存数组到 Cookie 主要涉及两个步骤:将数组转换为字符串形式并保存到 Cookie 中,以及从 Cookie 中获取数组并转换为 JavaScript 中的数组对象。以下是完整攻略: 将数组保存到 Cookie 中 1.首先需要将数组转换成字符串形式,可以使用 JSON 对象中的方法 JSON.stringify() 来实现。例如…

    JavaScript 2023年5月19日
    00
  • JavaScript Window窗口对象属性和使用方法

    JavaScript Window窗口对象属性和使用方法 JavaScript中的Window对象是浏览器窗口的根对象,可以通过Window对象来获取和操作窗口的各种属性和方法。 获取窗口属性 Window.innerHeight和Window.innerWidth属性 Window.innerHeight属性和Window.innerWidth属性分别用于…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部