宝哥软件园

Javascript中原型和__proto__关系的详细说明

编辑:宝哥软件园 来源:互联网 时间:2021-09-01

前言

当我知道原型时,我觉得我的头很大,尤其是/(o)/~~,原型和原型既愚蠢又难以区分。根据我自己的理解,我总结如下:

1.构造函数:

构造函数:可以通过new关键字创建特定类型对象的函数。例如,像Object和Array一样,它们是内置的本机构造函数,在运行时自动出现在执行环境中,可以直接使用。如下所示:

var arr=新数组();//使用Array构造函数创建数组实例Arrarr[0]=' a ';arr[1]=' b ';警报;//a,bvar obj=new Object();//使用对象构造函数创建对象实例objobjobj。名称=' c年龄=12岁;alert(obj . name);//c我们可以创建带有自定义属性和方法的构造函数,例如:

//创建构造函数person函数person(姓名、年龄){this。name=namethis.age=年龄;this . SayName=function(){ alert(this . name)//};}//使用new关键字生成Person实例var person1=new Person('Tom ',22);var person2=新人(' Jerry ',21);person 1 . SayName();//Tomperson 2 . SayName();//Jerry注意以下几点:

构造函数的名字总是以大写字母开头(主要是为了区别于非构造函数,也就是区别于普通函数)。构造函数是函数,定义构造函数的语法与定义普通函数的语法相同。构造函数和普通函数的区别在于它们的使用方式不同。任何函数都可以用作构造函数,只要它是用新运算符调用的;不使用新运算符,它是普通函数函数人(姓名、年龄){this。name=namethis.age=年龄;this . SayName=function(){ alert(this . name)//};}//使用var person=new Person('Tom ',22)作为构造函数;person . SayName();//Tom //使用Person('Jerry ',30)作为普通函数;//添加到windowsayName();//Jerry相当于window . sayname();二、原型对象:

每个函数都有一个原型属性,这是一个指向原型对象的指针。在定义函数的同时创建原型对象。原型对象的目的是包含所有实例共享的属性和方法

函数Person(){}//定义了原型对象Person.prototype.name='Tom '的属性和方法;person . prototype . age=25;person . prototype . SayName=function(){ alert(this . name);};//原型对象中的所有属性和方法将由所有实例自动共享。var Person 1=new Person();var Person 2=new Person();person 1 . SayName();//Tomperson 2 . SayName();//Tom只要创建一个新的函数,每个函数在创建后都会得到一个原型属性,指向函数的原型对象(定义函数时同时创建原型对象),这个原型对象有一个名为“constructor”的属性,这个属性又指向函数本身,实现了循环指向。

如上例所示:alert (person。原型。建造师===人);//返回true

函数Person(){ } alert(Person . prototype . constructor===Person);//真三。__proto__(注意这里proto的左右两边有两个' _ ')

当调用构造函数来创建新实例时,实例的内部将包含一个指针[[Prototype]],该指针指向创建它的构造函数的原型。在脚本中没有访问[[Prototype]]的标准方法,但是大多数浏览器都支持通过_ _ prototype _ _进行访问。

函数Person(){}//定义了原型对象Person.prototype.name='Tom '的属性和方法;person . prototype . age=25;person . prototype . SayName=function(){ alert(this . name);};//原型对象中的所有属性和方法将由所有实例自动共享。var Person 1=new Person();var Person 2=new Person();person 1 . SayName();//Tomperson 2 . SayName();//Tomalert(person1。_ _ proto _ _===person . prototype);//true以上面的示例代码为例。对象之间的关系如下图所示:

总结:

(1)只要创建了一个函数,该函数的原型对象也同时被创建,并且原型对象中的属性和方法由它对应的构造函数创建的实例共享

(2)在创建每个函数后,它将获得一个原型属性,该属性指向函数的原型对象

每个对象的__proto__属性指向其构造函数的原型

好了,这就是本文的全部内容。希望本文的内容对你的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

更多资讯
游戏推荐
更多+