本文着重于对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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。