原型和原型链

本文解析了JavaScript中的原型链机制,包括语法糖的概念、五条原型规则及实例化过程。通过具体示例说明了如何实现继承,并详细解释了__proto__与prototype属性的作用。

var a = {} 其实是 var a = new Object() 的语法糖

var a = [] 其实是 var a = new Array() 的语法糖

function Foo(){...}其实是 var Foo = new Function(){...}的语法糖

5条原型规则

1. 所有的引用类型(对象、数组、函数)都有对象特性,可自由扩展属性(null除外)

2.所有的引用类型(对象、数组、函数)都有一个__proto__属性,属性值是一个普通的对象

3.所有的函数都有一个prototype属性,属性值是一个普通的对象

4.所有的引用类型(对象、数组、函数),__proto__属性值指向它的构造函数的prototype属性值

5。当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的__proto__(即它构造函数的prototype中寻找)

每个函数 都有一个prototype属性,当一个函数被用作构造函数来创建实例时,这个函数的prototype属性值会被作为原型赋值给所有对象实例

new 创建对象的过程

1.创建一个新对象

2. this指向这个新对象

3. 执行代码,即对this赋值

4. 返回this

function aa(){

  a.prototype.name="Micheal";

  a.prototype.showNmae=function(){

    console.log(this.name);

  }

}

function AA(){

  A.prototype.age=15;

  A.prototype.showAge=function(){

    console.log(this.age);

  }

}

//AA继承aa

AA.prototype = new aa();

var BB = new AA();

console.log(BB);

console.log(BB.showName());  //Micheal

大致流程就是通过AA.prototype=new aa();使得AA.prototype(原型对象)下的__prototype__指向aa.prototype,当创建引用类型AA的实例化对象BB时,BB内部会产生一个__proto__属性指向AA的对象原型,再通过AA原型对象中的__proto__指向aa的原型对象,从而实现实例对象BB对aa的继承,整个链向:BB的__proto__-->AA.prototype-->aa.prototype,这就是一条原型链,如果再继续延伸的话,aa的原型对象下的__proto__属性会指向Function本身。

本人正在不断地学习和摸索中,如有错误,欢迎指正!




转载于:https://www.cnblogs.com/xuniannian/p/7453135.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值