JavaScript之原型

来源:互联网 发布:手甲钩淘宝 编辑:程序博客网 时间:2024/06/15 23:44

原型

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]

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

==主页传送门==

0 0
原创粉丝点击