JavaScript之原型、原型链

原型

        定义

            原型是function对象的一个属性,它定义了构造函数制造出的对象的公有祖先,通过该构造函数产生的对象,
            可以继承该原型的属性和方法,原型也是对象。
            
            构造函数不懂的话   点击这里    上面说原型是function对象的一个属性---prototype。
            
Person.prototype.name = "wang";
function Person(){}
var person = new person();
        在定义Person()构造函数的时候系统会定义Person.prototype = {},这个东西就是原型,原型是构造函数对象的公有祖先。
在下面person.name的结果是“wang”。person在寻找name属性的时候首先会在构造函数里面找,找不到的话会在原型里面找。

Person.prototype.name = "wang";
function Person(){
this.name = "zhou";
}
var person = new Person();
//person.name 为"zhou"

            原型的应用

        利用原型的特点和概念可以提取公有属性。
        在有的构造函数中,有些东西是传参过来的,而有些死属性是一直不变的。如果构造函数制造出很多个对象时候,重复的代码会执行很多次,会产生数据冗余,原型提取公有属性可以优化这一点。
        
Car.prototype = {
height :2600,
width : 800,
long : 4900}
function Car(color,ow){
this.color = color;
this.ow = ow;
}
var car1 = new Car("red","wang");
var car2 = new Car("blue","zhou");
//减少了公有属性的运行量
原型的增删改查:1.增,只能通过Person.prototype.xxx ="xxx"增加。 2.删,原型中是属性只能通过对原型+属性名的方式使用delete删除掉。3.改,修改使用Person.prototype.XXX = "XXX"的方法进行修改。4.查,对象可以查原型,使用对象名+属性名的方法,原型本身也可以查原型属性。

    constructor

    通过对象的constructor属性,可以查看对象的构造函数。
function Person (){}
var person = new Person();
console.log(person.constructor);
//结果为
//ƒ Person(){}

隐式属性:__proto__

    我们知道在构造函数被定义的时候系统会生成一个this对象,开始这个this对象中不是空的,是有值的,而这个值就是__proto__
function Person (){
//var this = {
//__proto__ : Person.prototype;
//}
}
    __proto__属性指向对象原型,并且可以修改。
    
function Person(){
//var this = {
__proto__ : Car.prototype;}
}
function Car (){}
var person = new Person();

       原型链

            定义:原型加原型再加原型所构成的链式叫做原型链。

               在原型的最顶端的原型是Object.prototype。
   
function Grand(){
this.name = "wang";}
var grand = new Grand();
Farther.prototype = grand;
function Farther(){}
var farther = new Farther();
Son.prototype = farther;
function Son(){}
var son = new Son();

    在上述原型链的最顶端,Grand.prototype.__proto__ 指向的就是Object.prototype。

在原型中增删查方法基本和原型相同,但是在改上子代可以通过访问父级属性再加属性名的方式修改属性值。

Object.create(原型)构造对象

    还有一种构造对象的方法:用Object.create(原型)构造对象。

var obj = Object.create(原型);
Person.prototype.name = "wang";
function Person(){}
var person = Object.create(Person.prototype);
绝大多数对象的最终都会继承Object。prototype。注意:这里说的是绝大多数。是有个特例的。在上面Object。create(原型),在这里括号里面除了写原型还有一个值是可以写的---null。制造出来的对象为空对象。
var obj = Object.create(null);
//此时在控制台输入obj
JavaScript语言我个人感觉是最有意思的了,我也是一个初学者,遇到问题,喜欢在博客上分享,
也希望能帮到大家。 一个初学者,有什么不足或者纰漏的话,希望在下面评论出来,相互学习,共同进步。
--主页传送门--











你可能感兴趣的:(JavaScript,JavaScript学习之路)