浅谈javascript中的prototype和__proto__的理解

浅谈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__的基本知识点及应用教程。

阅读剩余 29%

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

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

相关文章

  • Js 获取HTML DOM节点元素的方法小结

    那么首先介绍一下什么是DOM。 DOM简介 DOM,即文档对象模型(Document Object Model),是一种针对XML但经过扩展用于HTML的应用程序编程接口(API)。它为访问和操作HTML或XML文件提供了一种特定的结构化方式,使得开发者可以对文档的内容和结构进行添加、修改、删除或查找等操作。 Js 获取HTML DOM节点元素的方法小结 在…

    JavaScript 2023年6月10日
    00
  • javascript中AJAX用法实例分析

    JavaScript中AJAX用法实例分析 AJAX(Asynchronous JavaScript And XML),即异步JavaScript与XML。JavaScript通过XMLHttpRequest对象来向服务器发异步请求,从服务器获得数据,并更新网页,而不用在页面加载时刷新整个页面。 AJAX的基本用法 创建XMLHttpRequest对象 XM…

    JavaScript 2023年6月11日
    00
  • JavaScript判断对象和数组的两种方法

    当需要判断一个变量是对象还是数组时,JavaScript提供了两种方法: 1. 使用typeof运算符 使用typeof运算符,可以检测一个变量的数据类型,如果返回值是”object”,就可以判断这个变量是对象或数组。 // 判断对象 let obj = {}; if (typeof obj === "object" &&…

    JavaScript 2023年5月27日
    00
  • Javascript Math toSource() 方法

    JavaScript中的Math对象并没有toSource()方法。toSource()方法是JavaScript中的一个对象方法,用于返回一个表示对象源代码的字符串。但是,Math对象是一个内置对象,不是一个普通的JavaScript对象,因此不支持toSource()方法。 作为替代,我们可以使用console.dir()方法来查看Math对象属性和方法…

    JavaScript 2023年5月11日
    00
  • JavaScript 转义字符JSON parse错误研究

    下面是「JavaScript 转义字符JSON parse错误研究」的完整攻略。 背景 JavaScript中的字符串可以使用转义字符表示特殊字符,如\n表示换行,\t表示制表符。当我们将含有转义字符的字符串转成JSON对象时,有时会遇到JSON parse错误的问题,这可能会影响我们的程序正常运行。 解决方案 双重转义字符 JSON格式中定义了一些特殊字符…

    JavaScript 2023年5月18日
    00
  • JavaScript实现公告栏上下滚动效果

    下面是详细讲解“JavaScript实现公告栏上下滚动效果”的完整攻略。 概述 公告栏上下滚动效果是一个常见的网页特效,可以通过JavaScript实现。具体来说,当一组公告内容超出公告栏的显示范围时,可以让公告内容向上或向下滚动,以便显示所有内容。实现这一效果需要用到JavaScript的定时器、DOM操作、CSS样式等知识点。 实现步骤 下面介绍实现公告…

    JavaScript 2023年6月11日
    00
  • Canvas drawImage方法实现图片压缩详解

    Canvas的drawImage方法可以用来实现图片的压缩,下面将详细讲解该方法的使用过程。 drawImage方法简介 Canvas的drawImage方法可以将一个已有的图像绘制到Canvas上。该方法有3种用法: drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) dra…

    JavaScript 2023年6月10日
    00
  • Express框架req res对象使用详解

    下面是关于“Express框架req res对象使用详解”的完整攻略。 1. HTTP请求(req)对象 Express框架提供了一个request对象(通常缩写为 req),作为每个请求的入口点,它包含了HTTP请求的属性和方法。 1.1 请求路径 req.path属性可用于获取请求的路径,例如: app.get(‘/users/:id’, functio…

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