美文网首页
js 原型域原型链

js 原型域原型链

作者: 路上灵魂的自由者 | 来源:发表于2019-01-20 20:56 被阅读14次

    /*

    * 原型(prototootype)/ 原型链(__proto__)

    *

    * [函数]

    *      普通函数,类(所以的类:内置类。自己创建的类),Date是函数

    *        函数有自己的原型(Prototype)

    * [对象]

    *      普通对象,数组。正则,Math。argumentd。。。

    *        实例是对象类型的(除了基本类型的字面量创建的值),

    *         prototype的值也是对象类型的.

    *         函数也是对象类型的

    *  

    *     每一个对象都有自己的原型链(__proto__)

    *

    *

    * 1.所有的函数数据类型天生自带一个属性:prototype(原型),这个属性值是一个对象,浏览器会默认给它开辟一个堆内存

    * 2.在浏览器给prototype开辟的堆内存中默认有天生自带的属性:constructor,这个属性存储的值是当前函数本身

    * 3.每一个对象都有一个__proto__的属性,这个属性指向当前实例所属类的prototype(如果不能确定它是谁的实例,都是Object的实例)

    *

    *

    */

    // 内置类(堆Array内置类的分析)

    对内置类的分析

    每一个类都把供实例调取的公共属性方法,存储到自己的原型上(原型Prototype的作用就是存储一些公共的属性和方法,供它的实例调取使用)

    原型链:它是一种基于__proto__向上查找的机制,当我们操作实例的某个属性或者方法的时候,首先找自己空间中私有的属性或者方法

    1.找到了,则结束查找,使用自己私有的即可

    2.没有找到,则基于__proto__找所属类的prototype,如果找到,就用这个公有的,如果没有找到,基于原型上的__proto__继续向上查找 ,一直找到Object。prototype的原型位置,如果在没有,操作的属性或者方法不存在。


    function Fn(){

        var n = 10;

        this.AA = function(){

            console.log(`AA[私有]`)

        };

        this.BB = function(){

            console.log(`BB[私]`)

        }

    }

    Fn.prototype.AA = function (){

        console.log(`AA[公]`)

    }

    var f1 = new Fn();

    var f2 = new Fn();

    console.log(f1.n)

    对自定义类的分析

    相关文章

      网友评论

          本文标题:js 原型域原型链

          本文链接:https://www.haomeiwen.com/subject/xksfjqtx.html