关于js中原型链的理解

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,一个对象。无论什么时候,我们只要创建一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性对象指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个 constroctor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。例如:

function Person(){}

当我们创建这个Person函数(对象)的时候,该函数便有了一个prototype属性,它的原型对象Person.prototype会获得一个constroctor属性,那么Person.prototype.constroctor便指向了Person。更直白一点讲就是,如果我们再此基础上再加一句

var p=new Preson();

  那么,p的原型就会指向构造器的prototype属性,也就是Person.prototype。

那么,原型链具体的工作机制是什么?请看下面这个例子

function foo(){}
foo.prototype.z=3;

var obj=new foo();
obj.y=2;
obj.x=1;

obj.x;//1
obj.y;//2
obj.z;//3

typeof obj.toString();//‘function‘
‘z‘ in obj;//true
obj.hasOwnProperty(‘z‘);//false

当输出obj.z的时候,并不会因为obj对象没有z属性而输出undefied,而是查找obj的原型也就是foo.prototype,这是js发现z的值是3,所以就会输出obj.z的值为3.

实际上,我们用对象字面量创建的函数对象,其原型obj.prototype会指向Object.prototype,而Object.prototype也是由原型的,其值是null,这是上就是一个

原型链,而这也是  typeof obj.toString(); 为function的原因,因为沿着原型链向上查找,便找到了object中的toString方法。

时间: 2024-10-23 00:17:11

关于js中原型链的理解的相关文章

JS中原型链的理解

在谈原型链之前,我们首先要了解自定义函数与 Function 之间是什么关系,而构造函数.原型和实例之间又存在什么千丝万缕的关系呢?其实,所有的函数都是 Function 的实例.在构造函数上都有一个原型属性 prototype,该属性也是一个对象:那么在原型对象上有一个 constructor 属性,该属性指向的就是构造函数:而实例对象上有一个 _proto_  属性,该属性也指向原型对象,并且该属性不是标准属性,不可以用在编程中,该属性用于浏览器内部使用. 1 // _proto_ 2 在函

JS中原型链深刻理解

1.自定义的构造函数定义对象 2.定义函数

前端基本知识(二):JS的原型链的理解

之前一直对于前端的基本知识不是了解很详细,基本功不扎实,但是前端开发中的基本知识才是以后职业发展的根基,虽然自己总是以一种实践是检验真理的唯一标准,写代码实践项目才是唯一,但是经常遇到知道怎么去解决这个问题,但是不知道使用的是什么一种方法,方法的原理是什么,现在觉得大学里学习的基本知识还是很重要的,一定有自己的理解才能走的更远. 无论以后自己的学习新的技术,但是万变不离其宗,基本扎实,学习效率高. 废话这么多,开始了今天理解的四部分部分. 一.JS的原型链理解方式 二.原型理解 三.规则 四.j

关于JS中原型链中的prototype与_proto_的个人理解与详细总结(代码示例+高清无码大图!——自备瓜子花生)

一直认为原型链太过复杂,尤其看过某图后被绕晕了一整子,今天清理硬盘空间(渣电脑),偶然又看到这图,勾起了点回忆,于是索性复习一下原型链相关的内容,表达能力欠缺逻辑混乱别见怪(为了防止新人__(此处指我)__被在此绕晕,图片就放在末尾了.) 以下三点需要谨记 1.每个对象都具有一个名为__proto__的属性: 2.每个构造函数(构造函数标准为大写开头,如Function(),Object()等等JS中自带的构造函数,以及自己创建的)都具有一个名为prototype的方法(注意:既然是方法,那么就

js之原型链的理解

在js中,原型也是一个普通的对象,通过原型我们能够实现对象的属性继承. 首先,我们要明确引用类型有Array.Object.Function,这些引用类型都是能够自由的扩展属性. 1 var obj = {}; 2 obj.a = 10; 3 obj.b = 20; 4 5 obj; // Object {a: 10, b: 20} 我们上面说的这几个引用类型都有一个属性__proto__,这是一个普通的对象.而这个__proto__属性是指向它的构造函数的prototype属性.我们可以在代码

怎么理解js的原型链继承?

前言 了解java等面向对象语言的童鞋应该知道.面向对象的三大特性就是:封装,继承,多态. 今天,我们就来聊一聊继承.但是,注意,我们现在说的是js的继承. 在js的es6语法出来之前,我们想实现js的继承关系,需要借助于原型链.之前的文章,我有讲过原型和原型链的概念.在这,再重新回顾一下. js中万物皆对象,每个对象都有一个隐式原型 __proto__ ,指向创建它的构造函数的原型对象. 函数(构造函数)除了有一个隐式原型对象,还有一个属性prototype,它指向一个对象,这个对象就是原型对

前端基本知识:JS的原始链的理解

一.JS的原型链理解方式 二.原型理解 三.规则 四.js常见的创建对象的各种方法 一.原始链理解方式 每一次原型链理解起来很费劲,而且经常容易出错,或者解释的不到位. 1.什么是对象实例,什么是原型(对象)? 2.什么是构造函数? 3.通过原型对象找到构造函数 4.原型的唯一性 5.原型链 6.原型链最终指向为null 7.继承 8.原型链的继承 9.原型链的向上搜索 10.对象的属性可以自定义 11.对象实例不能改动原型属性 12.原型属性的共享 13.原型的动态性 14.原型的重写 我去,

对原型链的理解 语言表达能力不好 直接用代码,哈

分享一下 我对原型和原型链的理解 原型对象: function People(nameValue,ageValue,fondValue)            {                this.name = nameValue;                this.age = ageValue;                this.fond = fondValue;            } People.prototype.rule = function()         

对Javascript中原型的深入理解

  理解原型对象 在Javascript中无论什么时候,只要创建一个新的函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象(这个对象的用途是包含可以有特定类型的所有实例共享的属性和方法).如果按照字面上的意思来理解,那么原型属性就是通过调用构造函数而创建的那个对象的实例的原型对象. 在默认的情况下,所有的原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针.如下图 function P