JS 原型及原型链的理解

33 篇文章 1 订阅
29 篇文章 0 订阅

   //通过自己理解可以说,也可以按下面方式说。

回答原型及原型链概念问题可以从以下方面解说

原型链作用代码复用和继承。

执行顺序:

<script >
        function Fun(){
                //this.run = 1;
        }
        Fun.prototype.run = 2;

        var obj = new Fun();

        //obj.run = 3;
        obj.__proto__.run = 4;
        Object.prototype.run = 5;
        console.log(obj.run) //执行结果如下:

                                         1)先从对象本身查找 打印3 。

                                         2)对象本身中没有再从-->构造函数中查找 打印1。

                                         3) 构造函数中没有再从-->对象原型中查找 打印 4 。

                                         4)对象原型中没有再从-->构造函数原型中查 打印2。

                                        5)构造函数中没有再次--》当前原型中的原型中查找。

                                        6)  当前原型中的原型中查找没有--》原型中的原型中的原型--null

        console.log(obj.__proto__)// fun
        console.log(obj.__proto__.__proto__)// Object

         console.log(obj.__proto__.__proto__.__proto__)// null
</script>


 

1 原型:

构造函数(person)在创造的时候,默认有prototype属性,对应一个空对象(之所以是空对象是没有我们定义的属性和方法), 这个空对象就是原型对象。

//显示原型和隐私原型

  显示原型:每个构造函数都有一个prototype属性,既显示原型

  隐式原型:每一个实例对象都有一个__proto__,既隐式原型

  构造函数的显示原型 等于 对象的隐式原型。

function person(){}

var fun = new person()

console.log(person.prototype === fun.__proto__) //true

2 原型链

查找对象中的属性和方法,如果没找到一直往上找,直到找到object--null为止

function Fun1(){ //Fun1(this).prototype = {} //显示原型 -- 可以增加属性和方法

  this.test1 = function(){ //显示原型中可以增加属性和方法

    console.log(1);

  }

}

Fun1.prototype.test2 = function(){

  console.log(2)

}

var Fun2 = new Fun1();//隐式原型 Fun2(this).__proto__ == Fun1.prototype

console.log(Fun2.test1()) //1

console.log(Fun2.test2()) //2

console.log(Fun2.toString()) //[object object]//找到了对象,继续找就是null

console.log(Fun2.test3()) //报错--没有test3方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值