js原型和原型链的理解,js原型和原型链的理解

js原型和原型链的理解,js原型和原型链的理解,JS原型、原型链深入理解

本文着重于对javascript中原型和原型链的深入理解。原型在JavaScript中是一个很难理解的概念。本文为大家解决了这个问题,感兴趣的朋友可以参考一下。

原型在JavaScript中是一个很难理解的概念,有很多原型相关的属性。对象有原型属性,函数对象有原型属性,原型对象有构造函数属性。

首先,满足原型

在JavaScript中,原型也是一个对象,对象的属性继承可以通过原型来实现。所有JavaScript对象都包含一个内部属性“[[Prototype]]”,它对应于对象的原型。

“[[Prototype]]”作为对象的内部属性,不能直接访问。所以为了方便查看一个对象的原型,Firefox和Chrome提供了__proto__这是非标准的(并非所有浏览器都支持)访问器(ECMA推出了标准的对象原型访问器“Object.getPrototype(object)”)。在JavaScript的prototype对象中,还有一个“constructor”属性,对应的是创建所有指向原型的实例的构造函数。

二、规则

在JavaScript中,每个函数都有一个原型属性。当一个函数作为构造函数创建实例时,这个函数的prototype属性值将作为一个原型赋给所有对象实例(即设置实例的` _ _ prototype _ _ `属性),即所有实例的原型都引用该函数的prototype属性。(* * * * `只有函数对象才有此属性!`****)

新建的过程分为三步

Var=新人('张三',20);

1.var p={ };初始化对象p。

2.p. _ proto _=Person.prototype,将对象p的__proto__属性设置为Person.prototype

3.Person.call(p《张三》,20);调用构造者来初始化p .调用/应用的使用

三、初识Object

对象本身是一个函数对象。(代码测试)既然是对象函数,肯定会有prototype属性,所以可以看出“Object.prototype”的值就是原型对象“Object {}”。相反,当您访问“Object.prototype”对象的“constructor”属性时,您将获得Obejct函数。

另外,当通过“object.prototype. _ prototype _”获取对象原型的原型时,会得到“null”,这意味着原型对象“Object {}”是原型链的末端。

四。第一次了解函数

和上面例子中的构造函数一样,JavaScript中的函数也是一个对象,所以可以通过_proto_找到构造函数对象的原型。

Function对象作为函数,会有prototype属性,会对应“function () {}”对象。

Function object作为一个对象,有__proto__属性,对应“Function.prototype”,即“Function . proto _==Function . prototype”。

下面简单介绍一下“原型”和“proto”:

所有对象都有__proto__属性,它对应于对象的原型。

对于函数对象,除了__proto__属性,还有prototype属性。当一个函数作为构造函数创建实例时,它的prototype属性值将作为原型赋给所有对象实例(即设置实例的__proto__属性)。

原型链结构图

原型链

因为每个对象和原型都有一个原型,对象的原型指向原型对象,

父亲的原型指向父亲的父亲,原型链由原型一层一层的连接而成。

一、属性查找

在查找对象的属性时,JavaScript将向上遍历原型链,直到找到具有给定名称的属性,直到搜索到达原型链的顶部(即Object.prototype)。如果仍然没有找到指定的属性,将返回undefined。

职能人员(姓名、年龄){

this.name=name

this.age=年龄;

}

person . prototype . max number=9999;

人。__proto__。min number=-9999;

var will=新人(' will ',28);

console.log(将。max number);//9999

console.log(将。min number);//未定义

在此示例中,MaxNumber和MinNumber属性分别添加到“Person.prototype”和“person.prototype”的原型对象中。在这里,我们需要搞清楚原型和原型的区别。

“Person.prototype”对应的是Person构造的所有实例的原型,也就是说,“Person.prototype”属于这些实例的原型链中的一部分,所以在搜索这些实例的属性时会引用“Person.prototype”中的属性。

对象创建方式影响原型链

var July={

姓名:'张三',

年龄:28,

getInfo: function(){

console.log(this.name '是' this.age '岁');

}

}

console . log(July . getinfo());

当以这种方式创建一个对象时,原型链会变成下图。七月对象的原型是“Object.prototype”,意思是对象的构建方式会影响原型链的形式。

{对象原型链结构图}

图片概述

1.所有对象都有__proto__属性,它对应于对象的原型。

2.所有的函数对象都有prototype属性,这个属性的值会赋给这个函数创建的图像的_ prototype _ property。

4.所有原型对象都有一个构造函数属性,它对应于所有指向原型的实例的构造函数的创建。

5.函数对象和原型对象通过原型和构造函数属性相互关联。

以上关于JS原型和原型链的详细介绍,希望对大家的学习有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: