ffe 03 原型
        
            原型(prototype)是JavaScript里的一个重要概念。它本来是极简单的。但因为一些原因,原型时常让试图了解它的人感到复杂。
        
        原型是对象的属性,它可以让一个对象从其他对象处获得额外的数据和方法。对象的原型一般也是对象,它也可以有原型,这便形成了原型链。
        
        1.设置对象的原型
        
            可以通过如下几种方式设置对象的原型。
        
        
            - 
                .__proto__
                因为原型就是对象的属性,直接设置对象的__proto__属性是最符合直觉的。但这反而是ES标准不推荐的用法。部分原因是并不是所有的浏览器都暴露了__proto__属性。
                
             
            - 
                Object.setPrototypeOf(object,prototype)
                推荐的设置对象原型的方式。
                
             
            - 
                Constructor.prototype
                设置构造器函数的prototype属性,那么通过new
                Constructor()生成的对象的原型就是Constructor.prototype本身。不要和对象的__proto__属性混淆了,只有函数(构造器函数)有prototype属性。这两个属性是两种设置对象原型的方式,殊途同归。
                
             
            - 
                Object.create(prototype)
                创建对象时,指定它的原型。
                
             
        
        2.读取对象的原型
        与设置对象的原型相对应,读取对象的原型有以下几种方式
        
            - .__proto__
 
            - Object.getPrototypeOf(object)
 
            - Constructor.prototype
 
        
        3.原型有什么用?
        无论通过哪种方式设置对象的原型,目的都是让对象获得额外的数据和方法。
        
有点像是A对象在“借”B对象的属性,海棠花“借得梅花一缕魂”的那个借。比如内置的数组对象,它的原型是Array.prototype,每个数组自然就“有”了Array.prototype里的方法。
        另外原型链的存在,可以让一个对象“借”得更远。比如A的原型是B,B的原型是C,那么A也可以访问C的属性。