js-原型

作者: YellowPoint | 来源:发表于2019-07-11 17:22 被阅读0次

    首先从题目来检查下掌握程度

    let Person = function(){
      this.name = 'Person'
    }
    Person.prototype.age = 22
    let p1 = new Person()
    
    问题是以下都是结果是什么 
    1. p1.__proto__
    2. Person.__proto__
    3. Person.prototype.__proto__
    4. Object.__proto__
    5. Object.prototype.__proto__
    6. Function.__proto__  
    7. Function.prototype
    8. Function.prototype.__proto__    
    9. p1.constructor
    10. Person.prototype.constructor
    11. Person.constructor
    12. Function.constructor
    13. Object.constructor
    
    
    
    
    
    1. p1.__proto__ === Person.prototype
    2. Person.__proto__ === Function.prototype
    3. Person.prototype.__proto__ === Object.prototype
    4. Object.__proto__ === Function.prototype
    5. Object.prototype.__proto__ === null
    6. Function.__proto__  === Function.prototype
    7. Function.prototype 是唯一一个prototype是function的构造器,且其__proto__指向Object.prototype,
    8. Function.prototype.__proto__ === Object.prototype
    9. p1.constructor === Person
    10. Person.prototype.constructor === Person
    11. Person.constructor === Function
    12. Function.constructor === Function
    13. Object.constructor === Function
    
    1. 所有对象的 __proto__ 都指向其构造器的 prototype
    2. Function.prototype也是唯一一个typeof XXX.prototype为 function的prototype。其它的构造器的prototype都是一个对象
    3. 只有函数对象才有 prototype 属性
    4. 每个对象都有一个 constructor 属性,可以获取它的构造器
    5. 所有的构造器都来自于 Function.prototype,甚至包括根构造器Object及Function自身。
    6. 实例的构造函数属性(constructor)指向构造函数。
    7. 凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。
    8. 连接存在于实例(p1)与构造函数(Person)的原型对象(Person.prototype)之间,而不是存在于实例(p1)与构造函数(Person)之间。
    9. instanceof的原理是判断实例对象的proto和构造函数的prototype是否是同一个引用
    10. 关系图,图中由相互关联的原型组成的链状结构就是原型链,也就是蓝色的这条线 原型链

    相关文章

      网友评论

          本文标题:js-原型

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