JS高级--原型以及原型链

一、原型

1.什么是原型?

原型是JS中继承的基础,JS的继承就是基于原型的继承。

2.几个基本定义

(1)每个函数都有一个prototype属性,它默认指向一个空的Object对象(称为原型对象)
(2)原型对象里面有一个constructor属性,它指向函数对象

代码展示:
在这里插入图片描述
在这里插入图片描述

(3)图示:
注:函数名叫Type ,prototype是其属性,Type.prototype指向的是Type的原型对象,原型对象里面有constructor属性constructor又指向的是Type。构造函数和函数对象之间是相互引用的关系。

二、显式原型与隐式原型

1.每个函数function都有一个prototype即显式原型属性
2.每个实例对象都有一个隐式原型属性
3.对象的隐式原型的值为其对应构造函数的显式原型的值
  //1、每个函数function都有一个prototype,称为显式原型属性 默认指向一个空的object对象
        console.log(Fn.prototype); //函数对象定义时添加此属性

        //2、每个实例对象都有一个_proto_可称为隐式原型(属性)
        //创建实例对象
        const fn = new Fn();  // this.__proto__ = Fn.prototype
        console.log(fn.__proto__);  //创建对象添加此属性


        //3、对象的隐式原型的值为其对应构造函数的显式原型的值
        console.log(Fn.prototype === fn.__proto__);

        //4、给原型添加方法
        Fn.prototype.test = function(){
            console.log("test()");
        };
        //通过实例对象调用原型的方法
        fn.test();

代码原型图示:

    function Fn(){

    }
    var fn = new Fn();

    Fn.prototype.test = function(){
        console.log("test()");
    };
    fn.text();

在这里插入图片描述
总结:
函数的prototype属性:

  1. 在定义函数时自动添加的,默认值是一个空Object对象。
  2. 对象的_proto_属性:创建对象时自动添加的,默认值为构造函数的prototype属性值。
  3. 显式原型可以直接操作,隐式原型不能直接操作。

三、原型链

访问一个对象属性时现在自身属性中查找,找到返回。
如果没有再沿着_proto_这条链向上查找,找到返回。
如果最终没有找到,返回undefined
别名:隐式原型链
代码:
        function Fn(){
            this.test1 = function(){
                console.log("test1()");
            };
            console.log(this);
        }

        Fn.prototype.test2 = function(){
            console.log('test2()');
        };

//创建一个实例对象
        var fn = new Fn();
        console.log(fn);

        console.log(fn.__proto__);

原型链图示:
在这里插入图片描述
注:原型链的尽头是Object的隐式原型属性为null,原型链是隐式原型链。
原型链的作用:查找对象的属性。
作用域链:查找变量。

四、总结:

1.所有函数都有两个属性一个隐式原型,一个显式原型。因为所有的函数都是大写Function的实例对象。下面两行代码是等价的
function foo(){
}
var foo = new Function();
2.实例对象的隐式原型等于其构造函数的显式原型
3.所有函数的隐式原型对象都相等,因为都等于大写Function的显式原型
4.所有函数的显式原型都指向一个空的Object对象但是Object除外
5.Object也是大写Function的实例

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值