JavaScript之原型

xiaoxiao2021-02-27  526

原型

1、定义 原型是JavaScript中的一个重要的概念,原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象

定义中提到,通过该构造函数产生的对象,可以继承该原型的属性和方法:

Person.prototype.name = 'zhangsan'; Person.prototype.age = 18; function Person () {} var oPerson = new Person(); console.log(oPerson.name); // zhangsan console.log(oPerson.age); // 18

虽然每一个对象都是独立的,但是他们都有共同的祖先,当我们访问这个对象的属性的时候,如果它没有这个属性,就会向上找到它的原型,然后在原型上访问这个属性。

2、利用原型特点,可以提取共同属性

把每一个对象都有的共有属性提取到原型上,这样当我们用构造函数构造大量的对象的时候,只需要走一遍,每一个对象调用属性的时候直接上原型上查找就好。

3、对象查看原型

this对象里面有一个默认的属性叫做 __proto__ 属性,这个属性值就是指向这个对象的原型 注:prototype是函数的属性,proto是对象的属性

4、对象查看构造自身的构造函数

prototype对象里面,有一个属性叫做constructor,这个属性记录的就是对象构造器,里面存的就是构造函数

原型链

注意:

绝大部分的对象最终都会继承自Object.prototype这个对象 原型链的终点一般是Object.prototype,但是并不是所有的对象都有原型

如:

console.log(Gra.prototype.__proto__); // Object{} console.log(Gra.prototype.__proto__.__proto__); // undefined //Gra.prototype上面还有原型,这个原型是一个空对象,这个空对象上面就没有原型了

Object.create()

这个方法之前在介绍创建对象方法是提到过,这个方法括号中需要一个参数,这个参数就是我们要创建的这个对象的原型对象。

var obj = {} ==> Object.create(Object.prototype);//这两者是等价的。

当然如果括号中写的是null,就表示创建了一个没有原型的对象。

原型链上的删除和修改问题

通过一个对象,改变原型上的引用值类型的数据的时候,那么所有原型是这个的对象的属性都会改变。

Person.prototype.arr = [1,2,3]; function Person () {} var p1 = new Person(); var p2 = new Person(); p1.arr.push(4); console.log(p2.arr); //[1,2,3,4]

注:对象不可以删除原型上的属性。

==主页传送门==

转载请注明原文地址: https://www.6miu.com/read-158.html

最新回复(0)