详解js中的原型,原型对象,原型链

我来为你详细讲解“详解js中的原型,原型对象,原型链”的完整攻略。

1. 原型

在 Javascript 中,每个对象都有一个原型对象(prototype)。原型是一个简单的对象,它是由对象创建函数(Object、Array、Function 等)创建的。

我们来看一个简单的示例:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

const person = new Person('Jack', 20);
console.log(person);

输出结果:

Person { name: 'Jack', age: 20 }

在这个示例中,我们创建了一个构造函数 Person,并通过 new 关键字创建了一个实例对象 person。实例对象 person 通过该构造函数 Person 的原型进行了继承。在 JavaScript 中,每个函数都有一个 prototype 属性,它指向的就是这个实例对象的原型。

console.log(Person.prototype);

输出结果:

Person {}

这里的 Person.prototype 就是 person 对象的原型。可以发现原型是一个普通的空对象。如果要向原型中添加属性或方法,可以直接在 Person.prototype 对象中定义和修改,例如:

Person.prototype.sayName = function() {
  console.log(this.name);
};
person.sayName(); // 输出 Jack

2. 原型对象

JavaScript 中的函数都是对象,因此它们也有一个原型对象。例如,通过函数对象 Function.prototype 对象添加的方法和属性,可以在所有函数中调用。

在前面的示例中,我们已经使用过构造函数的原型对象 Person.prototype,在这里再来加深一下印象。比如我们现在想添加一个 greet 方法,可以这样写:

Person.prototype.greet = function() {
  console.log('Hello, ' + this.name);
};

3. 原型链

所有的对象都有原型,通过原型链,可以访问到每一个对象的最终原型。原型链的核心就是每个对象都保持着一个内部链接到它自己的原型对象,这个链接成为 [[Prototype]]属性。

在前面的示例中,我们使用了 Person 构造函数创建的实例对象 person 通过原型链接到 Person.prototype 原型对象。Person.prototype 又连接到一个更基本的对象 Object.prototype

console.log(Object.getPrototypeOf(Person.prototype) === Object.prototype); // true

通过原型链,person 实例对象继承了 Person 构造函数的原型对象 Person.prototype 中的属性和方法,同时也继承了 Person.prototype[[Prototype]] 属性,这个属性指向 Object.prototype。因此,实例对象 person 可以调用 Object.prototype 中定义的方法。

比如:

console.log(person.hasOwnProperty('name')); // true
console.log(person.hasOwnProperty('toString')); // false
console.log(Object.prototype.hasOwnProperty('toString')); // true

在这里,我们分别使用 hasOwnProperty 方法来判断 person 实例对象是否包含 name 属性,和 toString 方法,同时也调用了 Object.prototype 中定义的 hasOwnProperty 方法去确认这些属性和方法的继承关系。

综上所述,原型、原型对象和原型链是 JavaScript 中很重要的概念,了解它们的关系可以大大提高代码的可维护性和可读性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解js中的原型,原型对象,原型链 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Javascript Math cos() 方法

    JavaScript中的Math.cos()方法用于返回一个数的余弦值。该方法接受一个参数,即要计算余弦值的角度,单位为弧度。以下是关于Math.cos()方法的完整攻略,包括两个示例。 JavaScript Math对象的cos()方法 JavaScript Math对象中的cos()方法用于返回一个数的余弦值。该方法接受一个参数,即要计算余弦值的角度,单…

    JavaScript 2023年5月11日
    00
  • JavaScript基础函数整理汇总

    JavaScript基础函数整理汇总 JavaScript作为前端开发中最重要的语言之一,函数作为其重要的编程元素之一,对于掌握JavaScript编程至关重要。本文将深入剖析JavaScript中基础函数的使用,包括函数的定义、调用、参数传递等方面,帮助初学者完整掌握JavaScript基础函数的概念和使用方法。 函数定义 JavaScript中函数的定义…

    JavaScript 2023年5月18日
    00
  • Js event事件在IE、FF兼容性问题

    下面是关于Js event事件在IE、FF兼容性问题的完整攻略: 1. 事件模型的差异 在Web页面中,事件是一种观察者模式的设计模式,即在一个对象上发生事件时,其它对象可以得到通知并做出相应的的处理。 但是,IE与其它主流浏览器的事件模型存在差异。IE采用了“事件冒泡”模型,而其它主流浏览器则采用了“事件捕获”模型。 事件冒泡模型 事件从最具体的元素开始发…

    JavaScript 2023年6月11日
    00
  • 使用JavaScript实现按钮的涟漪效果实例代码

    让我为您详细讲解使用JavaScript实现按钮涟漪效果的攻略。 标题 在开始之前,我们需要了解这个效果的实现原理。当用户点击一个按钮时,会在按钮的中心产生一个白色圆形的涟漪效果,随着时间的推移,这个圆形会逐渐消失。 为了实现这个效果,我们需要在按钮被点击的时候在按钮中心产生一个白色圆形,并且不断对这个圆形进行缩小和透明度降低的处理,直到圆形消失。 那么,如…

    JavaScript 2023年6月11日
    00
  • 理解 JavaScript Scoping & Hoisting(二)

    理解 JavaScript Scoping & Hoisting(二) 介绍 在 JavaScript 中,作用域和变量提升(hoisting)是非常重要的概念。在第一篇理解 JavaScript Scoping 和 Hoisting 的文章中,我们讨论了作用域和 JavaScript 内部如何解析变量名称的机制。本文将继续深入探讨 JavaScri…

    JavaScript 2023年6月10日
    00
  • Javascript toFixed 方法

    以下是关于JavaScript toFixed方法的完整攻略。 JavaScript toFixed方法 JavaScript toFixed()方法是Number对象的一个方法,用于将数字转换字符串,并保留指定的小数位数。我们可以使用toFixed()方法来格式化数字,使其符合我们的需求。 下面是一个使用()方法的示例: var num = 3.14159…

    JavaScript 2023年5月11日
    00
  • 疯掉了,尽然有js写的操作系统

    关于“疯掉了,竟然有JS写的操作系统”,我可以提供以下攻略。 什么是“JS操作系统” “JS操作系统”实际上是基于浏览器的操作系统,使用前端技术进行开发,其核心思想是JavaScript虚拟机和Web浏览器的结合。在这种操作系统中,所有IED编写的HTML、CSS和JavaScript均可作为应用程序运行。 如何搭建“JS操作系统” 1. 安装Node.js…

    JavaScript 2023年5月27日
    00
  • Bootstrap table的使用方法

    以下是关于Bootstrap table的使用方法的完整攻略。 Bootstrap table是什么? Bootstrap table是一个基于Bootstrap开发的强大的表格插件,提供了丰富的功能和定制选项,使得开发人员可以快速创建高度定制化的表格。 如何引入Bootstrap table? 在使用Bootstrap table之前,我们需要先引入Boo…

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