本文主要是介绍javascript中的prototype和__proto__的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在工作中有时候会看到prototype和__proto__这两个属性,对这两个属性我一直比较蒙圈,但是我通过查阅相关资料,决定做一下总结加深自己的理解,写得不对的地方还请各位大神指出。
-
跟__proto__属性相关的两个方法
-
判断属性是存在实例对象中,还是存在原型对象中的方法
-
获取或遍历对象中属性的几种方法
1、prototype
每个函数都有一个prototype属性,该属性是一个指针,指向一个对象。 而这个对象的用途是包含由特定类型的所有实例共享的属性和方法。使用这个对象的好处就是可以让所有实例对象共享它所拥有的属性和方法
2、 __proto__
每个实例对象都有一个__proto__属性,用于指向构造函数的原型对象。__proto__属性是在调用构造函数创建实例对象时产生的。
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ console.log(this.name); }; // 与声明函数在逻辑上是等价的 } var person1=new Person("Nicholas",29,"Software Engineer"); console.log(person1); console.log(Person); console.log(person1.prototype);//undefined console.log(person1.__proto__); console.log(Person.prototype); console.log(person1.__proto__===Person.prototype);//true
输出结果如下:
总结:
1、调用构造函数创建的实例对象的prototype属性为"undefined",构造函数的prototype是一个对象。
2、__proto__属性是在调用构造函数创建实例对象时产生的。
3、调用构造函数创建的实例对象的__proto__属性指向构造函数的prototype。
4、在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。
下图展示了使用Person构造函数创建实例后各个对象之间的关系
上图展示了 Person 构造函数、 Person 的原型属性以及 Person现有的两个实例之间的关系。
3、 跟__proto__属性相关的两个方法
这篇关于javascript中的prototype和__proto__的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!