返回顶部
首页 > 资讯 > 前端开发 > node.js >JavaScript中的原型是什么
  • 883
分享到

JavaScript中的原型是什么

2024-04-02 19:04:59 883人浏览 安东尼
摘要

本篇内容主要讲解“javascript中的原型是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的原型是什么”吧!JavaScript是

本篇内容主要讲解“javascript中的原型是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的原型是什么”吧!

JavaScript是一门动态语言, 你可以在任何时候向对象上添加属性,如下

function Student() {  this.name = 'LeBron James';  this.gender = 'Male';  }  var studObj1 = new Student();  studObj1.age = 15;  alert(studObj1.age); // 15  var studObj2 = new Student();  alert(studObj2.age); // undefined

正如上面的实例, age 属性附加在 studObj1 实例上. 然而 studObj2 实例没有这个属性, 因为 age 属性只在 studObj1  实例上定义了.

那么, 如果想在后期添加一个属性且能被所有的实例所共享, 该怎么办? 答案这就今天主角 Prototype.

Prototype 是一个对象, 默认情况下与JavaScript中的任何一个函数或对象有关, 只是唯一区别在于函数的prototype  属性是可访问和可修改的,而对象的prototype属性是不可见的.

默认情况下任何一个函数包含 Prototype 对象, 如下图:

JavaScript中的原型是什么

prototype 对象是一种特殊类型的可枚举对象, 可以将需要附加属添加到其上,这些属性将在其构造函数的所有实例之间共享。

我自己是一名从事了多年开发web前端程序员,目前辞职在做自己的WEB前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴。

因此, 把上面的示例中使用函数的 prototype 来添加属性,以便于所有对象中都可以访问到, 如下:

function Student() {  this.name = 'LeBron James';  this.gender = 'M';  }  Student.prototype.age = 15;  var studObj1 = new Student();  alert(studObj1.age); // 15  var studObj2 = new Student();  alert(studObj2.age); // 15

使用 字面量 或 通过 new关键字和构造函数 的方式创建的每一个对象都包含 __proto__ 属性, 该属性指向创建此对象的函数的 原型对象.

JavaScript中的原型是什么

你可以在谷歌和火狐开发者调试工具中查看该属性(__proto__) , 根据下面的示例:

function Student() {  this.name = 'LeBron James';  this.gender = 'M';  }  var studObj = new Student();  console.log(Student.prototype); // object  console.log(studObj.prototype); // undefined  console.log(studObj.__proto__); // object  console.log(typeof Student.prototype); // object  console.log(typeof studObj.__proto__); // object  console.log(Student.prototype === studObj.__proto__ ); // true

正如上面例子看到, 函数通过 [[函数名称]].prototype 方式访问到原型对象. 但是, 对象(实例)并没有暴露出 prototype  属性,而是使用 __proto__ 来访问它.

Object 对象的原型

前面提及到, 原型对象在对象中是不可见. 使用 Object.getPrototypeOf(obj) 方法来访问实例的原型对象. (这也是推荐方式,  __proto__ 并不是标准属性, 在IE11以下其它浏览器中没有实现).

function Student() {  this.name = 'LeBron James';  this.gender = 'M';  }  var studObj = new Student();  Student.prototype.sayHi= function(){  alert("Hi");  };  var studObj1 = new Student();  var proto = Object.getPrototypeOf(studObj1);   // returns Student's prototype object    alert(proto.constructor);   // returns Student function

Object 原型对象包含如下 属性 和 方法

属性描述constructor返回创建该实例的构造函数__proto__指向创建该实例的构造函数的原型对象.方法描述hasOwnProperty()返回一个布尔值,指示对象是否包含指定的属性作为该对象的直接属性,而不是通过原型链继承。isPrototypeOf()返回一个布尔值,指示指定的对象是否位于调用此方法的对象的原型链中。propertyIsEnumerable()返回一个布尔值,该布尔值指示指定的属性是否可枚举。toLocaleString()返回本地格式的字符串.toString()返回对象字符串形式.valueOf()返回指定对象的原始值.

Chrome 和 Firfox 将对象的原型表示为 __proto__, 而内部引用为 [[Prototype]].  IE不支持,只有IE11包含它.

修改原型

如上所述, 每个对象都能链接到函数的原型对象. 如果您更改了函数的原型, 则只有新对象将链接到更改后的原型. 所有其他现有对象仍然链接到旧的函数原型.  下面实例来演示这个场景:

function Student() {  this.name = 'LeBron James';  this.gender = 'M';  }  Student.prototype.age = 15;  var studObj1 = new Student();  alert('studObj1.age = ' + studObj1.age); // 15  var studObj2 = new Student();  alert('studObj2.age = ' + studObj2.age); // 15  Student.prototype = { age : 20 };  var studObj3 = new Student();  alert('studObj3.age = ' + studObj3.age); // 20  alert('studObj1.age = ' + studObj1.age); // 15  alert('studObj2.age = ' + studObj2.age); // 15

使用原型

原型对象被JavaScript引擎用来做两件事:

查找对象的属性和方法在JavaScript中实现继承

function Student() {  this.name = 'LeBron James';  this.gender = 'M';  }  Student.prototype.sayHi = function(){  alert("Hi");  };  var studObj = new Student();  studObj.toString();

在上面的示例, toString() 方法在 Student 中没有定义, 那么它是如何以及从哪里找到 toString() 的呢?

在这里,原型出现了. 首先, JavaScript 引擎检查 studObj 是否存在 toString 方法?. 如果没有找到,那么它使用  studObj 的 __proto__ 链接指向 Student函数 的 原型对象. 如果它仍然无法找到它那么它会在往上层并检查 Object  函数的原型对象,因为所有对象都是从 JavaScript 中的 Object 派生的,并查找 toString() 方法. 因此,  它在Object函数的原型对象中找到 toString()方法,因此我们可以调用 studObj.toString().

查找方式,如下图所示

JavaScript中的原型是什么

到此,相信大家对“JavaScript中的原型是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: JavaScript中的原型是什么

本文链接: https://lsjlt.com/news/85356.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript中的原型是什么
    本篇内容主要讲解“JavaScript中的原型是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的原型是什么”吧!JavaScript是...
    99+
    2024-04-02
  • JavaScript中的原型和原型链是什么
    这篇文章主要介绍“JavaScript中的原型和原型链是什么”,在日常操作中,相信很多人在JavaScript中的原型和原型链是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript中的原型和...
    99+
    2023-06-21
  • JavaScript中原型和原型链是什么
    本篇文章给大家分享的是有关JavaScript中原型和原型链是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。而原型、原型链就是其中之一。每...
    99+
    2024-04-02
  • javascript中的原型链是什么
    本篇内容主要讲解“javascript中的原型链是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript中的原型链是什么”吧! ...
    99+
    2024-04-02
  • javascript的原型和原型链是什么
    小编给大家分享一下javascript的原型和原型链是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • JavaScript原型与原型链是什么
    这篇文章主要介绍“JavaScript原型与原型链是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript原型与原型链是什么”文章能帮助大家解决问题...
    99+
    2024-04-02
  • JavaScript原型链的原理是什么
    这篇文章主要讲解了“JavaScript原型链的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript原型链的原理是什么”吧!解析原型...
    99+
    2024-04-02
  • javascript中原型对象this的原则是什么
    小编给大家分享一下javascript中原型对象this的原则是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!原则只有当调用这个函数时,才能确定构造函数中的this指向谁。一般来说,构造函数中的this指的是函数的调用...
    99+
    2023-06-20
  • javascript中原始类型指的是什么
    这篇文章主要介绍了javascript中原始类型指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、类型说明boolean布尔,值为 true 或 false&nbs...
    99+
    2023-06-15
  • JavaScript原型链是什么
    这篇文章主要为大家展示了“JavaScript原型链是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript原型链是什么”这篇文章吧。1、构造函数和实例假设你声明一个方法叫做Fo...
    99+
    2023-06-25
  • Javascript的原型和原型链是什么意思
    这篇文章主要介绍Javascript的原型和原型链是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、为什么要使用原型?怎样去理解原型的出现1、对象字面量创建对象的缺点想要介绍原型,就不得不提为什么我们要使用...
    99+
    2023-06-29
  • JavaScript原型链指的是什么
    这篇文章主要为大家展示了“JavaScript原型链指的是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript原型链指的是什么”这篇文章吧。1...
    99+
    2024-04-02
  • javascript原型是什么意思
    这篇文章主要介绍javascript原型是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! JavaScript的对象都有一个内置的Prototyp...
    99+
    2024-04-02
  • javascript的原型式继承的原理是什么
    这篇文章给大家介绍javascript的原型式继承的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、说明利用空对象作为中介,将某个对象直接分配给空对象构造函数的原型。2、缺点原型链继承多个实例的引用类型属性...
    99+
    2023-06-15
  • javascript的构造函数, 原型,原型链和new是什么
    这篇“javascript的构造函数, 原型,原型链和new是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“j...
    99+
    2023-06-29
  • JavaScript的原型是什么你知道吗
    目录先看三个对象一、构造函数(对象): 二、实例对象三、原型对象:再看三个属性:一、prototype:二、__proto__三、constructor属性原型链总结:先看...
    99+
    2024-04-02
  • JavaScript的继承和原型链是什么
    小编给大家分享一下JavaScript的继承和原型链是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言JavaScri...
    99+
    2024-04-02
  • javascript是弱类型语言的原因是什么
    本篇内容主要讲解“javascript是弱类型语言的原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript是弱类型语言的原因是什么”吧!在...
    99+
    2024-04-02
  • JavaScript中jsdeferred的原理是什么
    这篇文章将为大家详细讲解有关JavaScript中jsdeferred的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。2.1 构造函数这里使用了安...
    99+
    2024-04-02
  • JavaScript中this的原理是什么
    本篇文章为大家展示了JavaScript中this的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一、this原理this是JavaScrip...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作