欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS原型对象、隐式原型与原型链

程序员文章站 2022-07-02 08:59:36
原型对象 与 prototype任意构造器中都有prototype属性,该属性的值为一个对象,这个对象就叫做原型对象隐式原型 与 proto任意对象(除null)中都有属性_proto_ ,该属性会指向这个对象的原型对象。任意对象(除null)中都有属性constructor,该属性指向创建这个对象的构造器。原型链对象属性查找机制。先在自己的私有属性种找,无。则沿着_proto_去原型对象中找,再无,继续沿着_proto_去原型对象的原型对象中找。直至找到Object的原型对象(Object的...

原型对象 与 prototype

任意构造器中都有prototype属性,该属性的值为一个对象,这个对象就叫做原型对象

隐式原型 与 proto

任意对象(除null)中都有属性_proto_ ,该属性会指向这个对象的原型对象。
任意对象(除null)中都有属性constructor,该属性指向创建这个对象的构造器。

原型链

对象属性查找机制。先在自己的私有属性种找,无。则沿着_proto_去原型对象中找,再无,继续沿着_proto_去原型对象的原型对象中找。直至找到Object的原型对象(Object的_proto_指向null)为止。这样形成的一条查找链就是原型链。
如果一直没有找到,结果为undefined。

对应关系图解
JS原型对象、隐式原型与原型链

代码

原型链代码段

    <script>
    function Fn(num){
        this.x=this.y=num;
    }
    Fn.prototype={
        x:20,
        sum:function(){
            console.log(this.x+this.y)
        }
    }
    Fn.prototype.constructor=Fn;
    let f1 = new Fn(10);
    console.log(f1.sum===Fn.prototype.sum)
    f1.sum();
    Fn.prototype.sum();
    console.log(f1.constructor)
    </script>

解释

Fn构造器(Fn构)prototype属性指向Fn构的原型对象(Fn原)
Fn原有constructor属性指回Fn构

Fn.prototype={
 x:20,
sum:function(){
    console.log(this.x+this.y)
   }
}

将Fn的原型对象指向改变,指向一个新的对象A。新对象A内容为{}内容

Fn.prototype.constructor=Fn;

新对象A中添加constructor属性,值为Fn。先新建new一个空对象,然后在赋值。

JS原型对象、隐式原型与原型链

我的理解

1)F构造器prototype属性指向F构的原型对象(F原)
2)F原有constructor属性指回F构
     F原有_ _ proto_ _指向一个object的原型对象(创建这个原型对象的构造器的原型对象)
3)object原型对象(o原)有一个constructor属性指回object构造器(o构)
   o原有_ _proto_ _指向null
   同样,o构有prototype属性指向o原

4)查找一个对象的属性,先在自己的原型对象上找
   如果没有找到,则沿着_proto_去原型对象中找,直至找到object中的原型对象null
5)_proto_属性中的值为null。最终没有找到为undfine

本文地址:https://blog.csdn.net/sd6022/article/details/107574489

相关标签: js javascript