js学习笔记 原型与原型链

prototype属性

显性对象

1.所有javascript对象都有一个指向它的隐性原型对象的内部链接__prototype__,但只有函数对象才有prototype这个属性,当在方法原型中调用__prototype__时返回的是一端机器码(暂时不知道为什么,求大佬告知)

   function test(){
            console.log("test")

        }
        test.prototype.say=function(){
            console.log("say my name")
        }
        console.log(test.prototype)//一个原型对象   {say: ƒ, constructor: ƒ}
        console.log(test.__proto__)//ƒ () { [native code] }

隐性对象

在创建对象实例的时候,对象实例会创建一个隐式对象指向相应的函数的显示对象,在实验中的表现为:

   function test(){
            console.log("test")

        }
        test.prototype.say=function(){
            console.log("say my name")
        }

        let b=new test()
        console.log(a.__proto__)   //{say: ƒ, constructor: ƒ}
        console.log(test.prototype)//{say: ƒ, constructor: ƒ}

原型链

大概解释图
原型链解释图
有上图可知:
栈空间testFunction地址内存贮着testFunction函数对象,而testFunction函数对象中有一个prototype属性这是函数对象的显示对象,这个显式对象指向一个Object实例对象,也就是testFunction函数的原型对象;而且tesFunction的实例对象有一个__proto__隐式对象也是指向testFunction的原型对象。最后test原型对象会指向最终的Object原型对象;里面存放着所有对象都能使用的函数和属性。原型链的作用也就是当一个对象调用方法属性的时候会顺着原型链一直往下找,这也就是为什么用户没有定义的属性和方法也能使用的原因

 function testFunction(){
            console.log(test)
        }
        console.log(testFunction.prototype)

在这里插入图片描述

一些补充的细节

在上面我们提到过函数对象的显示原型指向了一个Object实例对象,但从如下代码中我们发现:

function testFunction(){
            console.log(test)
        }
        console.log(testFunction.prototype instanceof Object);
        console.log(Array.prototype instanceof Object);
        console.log(Function.prototype instanceof Object);
        console.log(Object.prototype instanceof Object);

打印结果为:
在这里插入图片描述
我们发现上面出现了一个叛徒,那就是Object的显示原型打印出来并不是Object对象原因尚且不知 。愿大佬点播

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值