浅谈javascript中的prototype和__proto__的理解

yizhihongxing

浅谈Javascript中的prototype和__proto__的理解

Javascript中有两个与对象原型相关的概念——prototype__proto__,它们在原型继承和对象属性访问时作用重要。下面我们详细讲解它们的理解。

1. prototype

prototype是一个对象,它存在于每一个函数(function)中。当我们使用new关键字来调用函数时,prototype对象中的属性和方法会被加入到新生成的对象中。

示例一:

function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

Person.prototype.getFullName = function() {
  return this.firstName + ' ' + this.lastName;
}

var person1 = new Person('Alice', 'Smith');
console.log(person1.getFullName()); // Alice Smith

在以上示例中,我们定义了一个Person函数,并给它的prototype对象添加了一个getFullName方法,接着我们使用new关键字调用Person函数,并将生成的对象存放在person1变量中。我们可以通过person1.getFullName()访问getFullName方法,并得到其返回值。

2. __proto__

__proto__是一个对象内置的属性,它指向该对象的构造函数(constructor)的prototype对象。当我们访问一个对象的属性时,首先查找对象本身是否拥有该属性,如果没有就会一级一级向上查找其构造函数的prototype对象。

示例二:

function Dog(age) {
  this.age = age;
}

Dog.prototype.bark = function() {
  console.log('wang!');
}

var d = new Dog(2);
console.log(d.age); // 2
console.log(d.bark); // function()...
console.log(d.__proto__ === Dog.prototype); // true
console.log(d.__proto__.__proto__ === Object.prototype); // true

在以上示例中,我们定义了一个Dog构造函数,给它的prototype对象添加了一个bark方法,并使用new关键字来调用生成d对象。接着我们访问d对象的age属性和bark方法,发现这两个属性和方法都是存在于Dog构造函数的prototype对象上的。最后我们比较d.__proto__是否指向Dog.prototype对象,以及d.__proto__.__proto__是否指向Object.prototype对象,结果都为true

结论

prototype是函数(function)对象独有的属性,它的作用是添加公共属性和方法,以用于所有通过该函数生成的对象。

__proto__是每个对象独有的属性,它的作用是指向该对象构造函数的prototype对象,以支持原型链继承。

在实际应用中,我们可以通过prototype来定义构造函数的公共属性和方法,也可以使用__proto__来实现对象之间的属性和方法的继承。

以上就是Javascript中prototype__proto__的基本知识点及应用教程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈javascript中的prototype和__proto__的理解 - Python技术站

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

相关文章

  • 如何实现JavaScript动态加载CSS和JS文件

    实现JavaScript动态加载CSS和JS文件通常通过动态创建HTML元素来实现。 一、动态加载CSS文件 创建一个link元素 通过JavaScript动态创建一个link元素,并将其属性设置为需要加载的CSS文件路径。 <link id="dynamic-css" rel="stylesheet" type…

    JavaScript 2023年5月27日
    00
  • js实现0ms延时定时器的几种方式

    下面是详细的讲解“js实现0ms延时定时器的几种方式”的完整攻略。 什么是“0ms延时定时器” “0ms延时定时器”是指在JavaScript定时器中设置的延时时间为0ms,并且能够保证事件队列中下一个任务的执行完全在当前任务结束后立即执行。这种延时定时器对于实时性要求较高的操作非常有用,例如画布绘制、游戏开发等。 几种实现方式 以下是几种实现“0ms延时定…

    JavaScript 2023年6月11日
    00
  • JS中let的基本用法举例

    JS中let是一种声明变量的关键字,而且它是在ES6(ECMAScript 2015)中引入的。相对于var关键字,let具有更为严格的作用域和更加灵活的用法。以下是let的几个基本用法: 1. 块级作用域 let关键字通过块级作用域,可以让我们更灵活地控制变量的作用域范围。块级作用域,指的是在代码块内声明的变量,在代码块外是不可见的。例如: functio…

    JavaScript 2023年5月28日
    00
  • JavaScript运动函数实例详解

    JavaScript运动函数实例详解 运动函数是实现网页动画效果的必备工具之一,JavaScript中有多种运动函数实现方式,其中以JavaScript的定时器方式实现最为常见。本文将详细讲解使用JavaScript定时器实现运动函数的方法,同时给出两个示例说明。 定时器 JavaScript中用于实现定时器的函数是setInterval()和setTime…

    JavaScript 2023年5月27日
    00
  • JS面向对象编程详解

    JS面向对象编程详解 JavaScript是一种基于对象的语言。在JavaScript中,对象既可以是内置的,如Math和Date对象,也可以是自定义的。在这种语言中,我们使用面向对象编程(OOP)模式进行代码的组织和控制。 面向对象编程(OOP)是一种程序设计模式,它将计算机程序中的数据和功能组成了对象,通过对象之间的交互来实现计算机程序的功能。在Java…

    JavaScript 2023年5月18日
    00
  • JavaScript本地储存:localStorage、sessionStorage、cookie的使用

    JavaScript本地储存:localStorage、sessionStorage、cookie的使用 什么是本地储存? 在网站开发中,需要将一些数据临时储存起来。本地储存技术就是把数据储存在客户端浏览器中,这样就可以避免跨页面、跨域、跨浏览器的问题,提高网站的性能和用户体验。本地储存技术通常包括localStorage、sessionStorage和Co…

    JavaScript 2023年6月10日
    00
  • JS获取字符对应的ASCII码实例

    首先我们来说明一下什么是ASCII码。ASCII码是一种常见的字符编码方案,使用7位二进制数来表示128个字符(包括字母、数字、符号等)。 接下来,我们将介绍如何使用JavaScript获取字符对应的ASCII码。 1. 使用charCodeAt()方法 charCodeAt()方法返回指定位置字符的Unicode编码,我们可以使用charCodeAt()方…

    JavaScript 2023年5月28日
    00
  • 兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现

    要实现检测页面装载完毕的功能,可以使用Ext.onReady函数。该函数是ExtJS框架提供的,用于在页面元素完全加载之后执行给定的函数。 具体步骤如下: 引入ExtJS的库文件。在HTML页面的标签中加入以下代码: <script type="text/javascript" src="path/to/extjs/ext…

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