首页 > 编程知识 正文

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

时间:2023-05-04 05:21:49 阅读:249003 作者:2762

原型和原型链的理解:(面试题)
原型:每个函数都有 prototype 属性,该属性指向原型对象;使用原型对象的好处是所有对象实例共享它所包含的属性和方法。
原型链:主要解决了继承的问题;每个对象都拥有一个原型对象,通过__proto__ 指针指向其原型对象,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向 null。
在理解原型链之前,首先要知道构造函数、实例、原型三者是什么,以及之间的关系。
1.构造函数
function Person() {}
2.实例
var person = new Person();
1
构造函数: 和普通函数没什么区别,不过构造函数的首写字母始终都是大写的,
这是区别于普通函数,它是专门用来创建对象存在的。
实例:就是new一个构造函数。
原型:是一个对象,属性和方法是共享的,即共有的。
多个实例可以共享里面的属性和方法。
构造函数、原型、实例这三者的关系:

构造函数的prototype指向 原型方法的constructor
Person.prototype === { constructor: Person }
1
原型的constructor指向构造函数
Person.prototype.constructor === Person
1
实例的__proto__指针指向 原型对象
person.proto === { constructor: Person }
接下来我们看一段代码:
function Student(sname, sage){
this.sname = sname;
this.sage = sage;
}
Student.prototype.intr = function(){
console.log(I'm ${this.sname},I'm ${this.sage});
}
var lilie = new Student(“Li Lei”, 12);
var hmm = new Student(“Han Meimei”, 12);
console.log(lilie,hmm);
我们通过图形来看原型链间的关系:

*
原型的总结:
1)所有引用类型都有一个__proto_(隐式原型)属性,属性值是一个普通的对象
2)所有函数都有一个prototype(原型)属性,属性值是一个普通的对象
3)所有引用类型的__proto__属性指向它构造函数的prototype
4)函数的原型prototype:函数才有prototype,prototype是一个对象,指向了当前构造函数的引用地址
5)函数的原型对象__proto__:所有对象都有__proto__属性, 当用构造函数实例化(new)一个对象时,会将新对象的__proto__属性指向 构造函数的prototype
6)所有函数的__proto__都是指向Function的prototype
7)构造函数new出来的对象__proto__指向构造函数的prototype
非构造函数实例化出的对象或者对象的prototype的__proto__指向Object的prototype,Object的prototype指向null
8)所有的原型对象都会自动获得一个 constructor(构造函数)属性,这个属性(是一个指针)指向 prototype 属性所在的函数(Person)
9)实例的构造函数属性(constructor)指向构造函数 :person1.constructor == Person
10)原型对象(Person.prototype)是 构造函数(Person)的一个实例
11)原型的分类:
隐式原型(proto):上面说的这个原型是JavaScript中的内置属性[[prototype]],此属性继承自object对象,在脚本中没有标准的方式访问[[prototype]],但Firefox、Safari和Chrome在每个对象上都支持一个属性_proto_,隐式原型的作用是用来构成原型链,实现基于原型的继承
显示原型(prototype):每一个函数在创建之后,便会拥有一个prototype属性,这个属性指向函数的原型对象,显示原型的作用是用来实现基于原型的继承与属性的共享
prototype 和 proto 区别:
1)prototype是构造函数的属性
2)__proto__是每个实例都有的属性,可以访问 [[prototype]] 属性
3)实例的__proto__与其构造函数的prototype指向的是同一个对象

Prewitt

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。