原型及原型链

作用域链: 从上往下
原型链: 从下往上
学习前需理解对象,构造函数,数据类型

原型就是一个属性这个属性是构造函数的属性,构造函数是用来出对象,是构造函数制造出来对象的公共祖先,后面所有对象都会继承原型的属性和方法
在js中万物皆为对象,原型也是一个对象

原型涉及:_ _proto _ _,prototype,constructor,this
_ _proto _ _ 这是用来查看原型的,这个是对象的属性(注意:万物皆对象),这个属性可以查看,但是不能修改(隐式属性)

prototype 设置原型,这个是构造函数的属性

constructor 这个是对象的属性,主要是看该对象的爹是谁(查看对象的构造函数)
最终的原型全都为Object.prototype

我们需要牢记两点:①__proto__和constructor属性是对象所独有的;② prototype属性是函数所独有的。但是由于JS中函数也是一种对象,所以函数也拥有__proto__和constructor属性

例子:

在这里插入图片描述
细讲_ _proto _ _ **
_ _proto _ _
是指查找父级原型对象,当父级找不到时,会到父级的父级找,好比_ _proto _ 是一根线,从自己出发连接着自己父级的原型对象,原型对象也是对象,也拥有 _proto _ _属性,连接着父级原型对象的原型对象,最终的父级原型对象是Object原型对象,在往上就是null。他是一根线,所以只能通过它查看,并不能修改原型。

原型链
调用 __proto __ 可以看到父级的原型对象,父级原型对象里包含了 构造函数通过.prototype属性构造出来的原型,还有对象自带的__proto __ 和constructor

constructor 的原型,里面又包含了实例的属性和方法

父级的原型对象里的 _ _proto _ _则指向上一级的原型对象,里面包含了上一级的原型对象的__proto __,constructor,还有通过.prototype属性构造出来的原型。

当一个对象想要调用属性或方法时,会通过 __proto __这根线向上去查找,看自己的原型对象里有没有,没有则继续沿 __proto __这根线向上去查找,这个过程形成了一个链式链接,叫做原型链

比如像原始数据类型number,string,undefined,null(比较特殊),boolean,还有引用数据类型Object,Array,Function都有自己的属性和方法,我们可以直接调用,是因为系统默认每种数据类型都有自己的构造函数,里面放着对应的属性和方法,供我们调用。
在这里插入图片描述

在这里插入图片描述

任何的一个对象都会继承自Object.prototype这个对象,几种数据类型的原型对象的父级原型对象就是Object.prototype这个对象。但是有一种特殊情况就是null,这个是对象占位符,真正意义上的没有原型的对象,因为null没有原型。Object.是祖先级别的话,那null则已经处于外星人级别了。

数据类型都有自己的原型对象
怎么去判断这些数据类型? 通过typeof
typeof可以返回几种值? 6种
number string boolean undefined object function

typeof null   //object
typeof array  //object
typeof object    //object     他们的原型对象都是Object

怎么去区分这三个object?
Object.prototype.toString.call( 实例 )

例子
在这里插入图片描述

在这里插入图片描述
创建原型对象
以什么为原型创建对象
Object.create(obj)

var obj= {
		lastName : "zhang"
	}

	var p1 = Object.create(obj);
	  p1.name = "三" ;
	console.log(p1) //{name: "三"}
    console.log(p1.lastName)  //zhang
    console.log(p1.__proto__)  //{lastName: "zhang"}
                                 //lastName: "zhang"
                                 // __proto__: Object
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值