javascript原型链详解

本文深入讲解JavaScript中基于原型的对象创建方式及原型链的工作原理。从构造函数和原型对象的关联讲起,到如何使用`Object.create()`方法创建对象,再到解析属性值时原型链的作用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Javascript对象是基于原型(prototype-based)的,我们创建的对象,看起来要像我们想要的所有这种类型的对象那样,类似于盖房子,先建好一所房子,然后将其它房子都建成像这种模样的。

 

创建对象的步骤:首先创建对象的模板(原型对象),然后创建构造函数,再把构造函数和原型关联起来,最后实例化对象。

var proto = {};

function Animal(name){

         this.name= name;

         this.speak= function(){};

}

Animal.prototype = proto;

var cat = new Animal(‘Jimmy’);

 

使用new操作符创建对象,有点违背了基于原型的核心思想,我们可以用Object.create();代替

var proto = {};

var cat = Object.create(proto);

cat.name = ‘Jimmy’;

cat.speak = function(){};

 

这里的Object.create();在IE9以下都不支持,需要我们自己添加。其实这个方法就是帮我们把原型和对象关联起来了,我们完全可以自己实现一个。

 

var objectCreate = function(arg){

         if(!arg){ return {}; }

         functionobj(){}

obj.prototype =arg;

return newobj();

}

Object.create = Object.create ||objectCreate;

 

Javascript使用原型链来解析属性值(方法其实也是属性,就是把函数赋给属性,这个函数就成了方法),当请求对象的属性时,首先直接在该对象上查找,如果找到了,直接返回这个值,如果找不到,则查找对象的原型,如果在原型上也找不到,就查找原型的原型,以此类推。当找到Object.prototype时,原型链就结束了。如果在原型链的所有地方都找不到属性,就返回undefined。


总之,原型链可以概括为以下几句话,结合图片能更好的理解。

1、内置对象和自定义函数的__proto__都指向Function.prototype,也就是说,内置对象和自定义函数都可以看做Function的实例。

2、自定义函数的原型对象的__proto__和Function.prototype.__proto__都是指向Object.prototype的。

3、Object.prototype是终点,到此结束,也就是说Object.prototype.__proto__是null。

4、双对象:构造函数、原型对象

构造函数的prototype指向原型对象,原型对象的constructor指向构造函数。

5、实例出来的对象没有prototype,它通过__proto__指向原型对象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值