函数中的prototype属性
                1. 函数中prototype属性的值是一个对象或null,默认只有一个constructor属性指向函数本身。
                2. 当使用new Func()创建一个对象时,使用诸如 new F() 这样的构造函数来创建一个新对象。如果 F.prototype 是一个对象,那么 new 操作符会使用它为新对象设置 [[Prototype]]。
                3. prototype和[[Prototype]]不同:
                    – [[Prototype]] 是一个对象的隐藏属性,本质是一个指针,保存的是内存地址,指向对象的原型。
                    – prototype是一个函数中的属性,本质是一个对象或null。
                4. 实例对象通过原型链可以找到Func.prototype上的constructor属性
                        即new Func().constructor = Func = Func.prototype
 
 function User(name){
            this.name = name
        }

        User.prototype = {}

        const u1 = new User('zhangsan')
        const u2 = new u1.constructor('lisi')
        console.log(u2.name)

  

    1. 找u1.constructor时,先在u1自身找,u1中没有constructor,则通过[[Prototype]]顺着原型找;
            2. 原型是一个空的对象,里面也没有,再顺着原型链找,它的原型是Object.prototype,在此原型中有constructor,指向的是Object构造函数。
            3. 则 const u2 = new u1.constructor(‘lisi’);相当于 const u2 = new Object(‘lisi’);
            4. 创建出的u2中没有name属性,所以显示undefined
 
更改:向User.prototype中添加constructor属性,使其指向User构造函数
此时,先找u1中constructor,没有;
顺着原型链找,在User.prototype中找到了constructor
则 const u2 = new u1.constructor(‘lisi’);相当于 const u2 = new User(‘lisi’);
 
new User(‘lisi’)执行过程:
创建一个空对象,将this设置为该对象;
执行构造函数中代码,this.name = name 即为该对象添加一个name属性,属性值为传进去的’lisi’;
则空对象中就有一个属性name,将该对象的地址赋值给变量u2

原文地址:http://www.cnblogs.com/ahoge/p/16833661.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性