zoukankan      html  css  js  c++  java
  • 构造函数和实例对象和原型之间的关系

    看下面的代码

    <script>
        function Person(sex,age){
            this.sex=sex;
            this.age=age;
        }
        //   通过原型添加方法
        Person.prototype.sayHi=function(){
            console.log('你好呀')
        }
        var per=new Person('男','20')
    
        // 查看实例对象 我们发现:实例对象中有两个属性,age: "20"sex: "男"
        // 这两个属性是通过构造函数来获取的。即__proto__
        console.dir(per)
    
        // 构造函数名称
        //构造函数并没有sex和age这两个属性
        console.dir(Person)
    
    
    </script>
    

    我们发现的现象

    实例对象中有两个属性,age: "20"sex: "男"
    这两个属性是通过构造函数来获取的。即__proto__
    但是构造函数并没有sex和age这两个属性
    
    我们知道:实例对象中有一个属性,即__proto__;
    它也是对象,叫做原型。
    但是它不是标准的原型,是浏览器使用的。
    
    构造函数中有个属性,叫做prototype,它也是对象,叫做原型。
    是标准的属性,是程序员使用的。
    
    也就是说 __proto__或者说prototype都是原型对象
    
    所以我们可以大胆的猜测:
    console.log(per.__proto__==Person.prototype)
    输出的是true
    充分证明了我们说的 __proto__或者说prototype都是原型对象。
    只是一个是浏览器使用一个是程序员使用
    刚刚分析的是正确的哈
    
    那么他们的构造器呢
    console.log(per.__proto__.constructor==Person.prototype.constructor)
    同样返回来的是true
    

    构造函数和实例对象和原型之间的关系

    var arr=new Array(10,20,30)
    arr.join('40')
    console.dir(arr);
    
    
    同样的,我们在__proto__和prototype下都可以找到join方法
    __proto__是浏览器使用的原型,prototype 我们程序员使用的原型
    
    他们三者之间的关系是
    1. 构造函数创建了实例实例对象
    2. prototype这个属性指向的就是这个原型对象
    3. constructor这个构造器指向自己构造函数
    4. 实例对象本身没有eat方法,但是他有__proto__这个属性可以调用eat方法
       原型对象中的方法可以被实例对象共享。[eat方法可以被共享]
    5.构造函数创建了实例对象,有了构造函数也就有了原型对象
    

    上面这几句话等价于下面的

    1.构造函数可以实例化对象
    2.构造函数中有一个属性叫做prototype,是构造函数的原型对象。
    3.构造函数的原型对象{prototype}中有一个constructor构造器,
      这个构造器是指向自己所在的原型对象所在的构造函数。
    4.构造函数的原型对象prototype中的方法可以被实例对象直接访问的。
    5.实例对象的原型的对象(__proto__)指向的是该构造函数的原型对象。
    

    作者:明月人倚楼
    出处:https://www.cnblogs.com/IwishIcould/

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!

    万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    初始FreeMake
    C#三层架构
    文件上传
    Jquery动画效果(混合)
    反射机制
    Java使用Sockt进行通信(2)
    Java使用Socket进行通信
    JavaScript基础
    Java的继承
    事物>视图>索引>备份和恢复
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/15616873.html
Copyright © 2011-2022 走看看